Ответы:
Вы можете использовать printfметод, например так:
System.out.printf("%.2f", val);
Короче говоря, %.2fсинтаксис говорит Java возвращать вашу переменную ( val) с двумя десятичными знаками ( .2) в десятичном представлении числа с плавающей запятой ( f) от начала спецификатора формата ( %).
Есть и другие символы преобразования, которые вы можете использовать, кроме f:
d: десятичное целоеo: восьмеричное целоеe: с плавающей точкой в научной нотацииLocale.FRANCE?
Locale.USзаходит слишком далеко. Если вам нужно жестко закодировать «нейтральную» локаль для свертывания регистра, рендеринга чисел и т. Д., Укажите Locale.ROOT. Это подходит для текста, который будет использоваться другой программой, а не визуализирован для пользователей. Для текста, представляемого пользователю, учитывайте его языковой стандарт, независимо от того, указали ли они его явно или по умолчанию.
Вы можете использовать DecimalFormat. Один из способов его использования:
DecimalFormat df = new DecimalFormat();
df.setMaximumFractionDigits(2);
System.out.println(df.format(decimalNumber));
Другой способ - построить его, используя #.##формат.
Я нахожу все параметры форматирования менее читабельными, чем вызов методов форматирования, но это вопрос предпочтений.
System.out.printf("%.2f", value)синтаксисом? Это все еще вокруг?
DecimalFormatответы, я сразу же подумал, что был неправ, но спасибо за разъяснение этого.
df.setMinimumFractionDigits(2);к силе две цифры
Я бы предложил использовать String.format (), если вам нужно значение какString в вашем коде.
Например, вы можете использовать String.format()следующим образом:
float myFloat = 2.001f;
String formattedString = String.format("%.02f", myFloat);
double d = 1.234567;
DecimalFormat df = new DecimalFormat("#.##");
System.out.print(df.format(d));
DecimalFormat df = new DecimalFormat("0.00");
float f = 102.236569f;
DecimalFormat decimalFormat = new DecimalFormat("#.##");
float twoDigitsF = Float.valueOf(decimalFormat.format(f)); // output is 102.24
float floatValue=22.34555f;
System.out.print(String.format("%.2f", floatValue));
Выход 22,35. Если вам нужно 3 десятичных знака, измените его на «% .3f».
Многие люди упоминали DecimalFormat. Но вы также можете использовать, printfесли у вас есть последняя версия Java:
System.out.printf("%1.2f", 3.14159D);
Простой трюк состоит в том, чтобы сгенерировать более короткую версию вашей переменной, умножив ее, например 100, на округление и деление на100.0 снова. Таким образом, вы генерируете переменную с двумя десятичными разрядами :
double new_variable = Math.round(old_variable*100) / 100.0;
Этот «дешевый трюк» всегда был достаточно хорош для меня и работает на любом языке (я не Java-человек, просто изучаю его).
Вы можете использовать эти быстрые коды ниже, которые изменились в конце. Добавьте количество нулей, как указано после точки
float y1 = 0.123456789;
DecimalFormat df = new DecimalFormat("#.00");
y1 = Float.valueOf(df.format(y1));
Переменная y1 была равна 0.123456789 раньше. После кода он превращается только в 0,12 .
Посмотрите на DecimalFormat
Вот пример из учебника:
DecimalFormat myFormatter = new DecimalFormat(pattern);
String output = myFormatter.format(value);
System.out.println(value + " " + pattern + " " + output);
Если вы выберете шаблон типа "###. ##", вы получите два знака после запятой, и я думаю, что значения округлены. Вы захотите посмотреть на ссылку, чтобы получить точный формат, который вы хотите (например, хотите ли вы конечные нули)
Ниже приведен код, как вы можете отобразить вывод данных с плавающей запятой с двумя десятичными разрядами в Java:
float ratingValue = 52.98929821f;
DecimalFormat decimalFormat = new DecimalFormat("#.##");
float twoDigitsFR = Float.valueOf(decimalFormat.format(ratingValue)); // output is 52.98
ОК - ул, чтобы отпустить.
package test;
import java.text.DecimalFormat;
public class TestPtz {
public static void main(String[] args) {
String preset0 = "0.09,0.20,0.09,0.07";
String[] thisto = preset0.split(",");
float a = (Float.valueOf(thisto[0])).floatValue();
System.out.println("[Original]: " + a);
a = (float) (a + 0.01);
// Part 1 - for display / debug
System.out.printf("[Local]: %.2f \n", a);
// Part 2 - when value requires to be send as it is
DecimalFormat df = new DecimalFormat();
df.setMinimumFractionDigits(2);
df.setMaximumFractionDigits(2);
System.out.println("[Remote]: " + df.format(a));
}
}
Вывод:
run:
[Original]: 0.09
[Local]: 0.10
[Remote]: 0.10
BUILD SUCCESSFUL (total time: 0 seconds)
Небольшая простая программа для демонстрации:
import java.io.*;
import java.util.Scanner;
public class twovalues {
public static void main(String args[]) {
float a,b;
Scanner sc=new Scanner(System.in);
System.out.println("Enter Values For Calculation");
a=sc.nextFloat();
b=sc.nextFloat();
float c=a/b;
System.out.printf("%.2f",c);
}
}
Просто сделайте это, String str = System.out.printf("%.2f", val).replace(",", ".");если хотите убедиться, что независимо от языкового стандарта пользователя вы всегда получите / отобразите «.» в качестве десятичного разделителя. Это необходимо, если вы не хотите, чтобы ваша программа вылетала, если позже вы сделаете какое-то преобразование, напримерfloat f = Float.parseFloat(str);
Одна проблема, которая заставляла меня работать час или более DecimalFormat- она по-разному обрабатывает двойные и плавающие вводы. Даже смена RoundingMode не помогла. Я не эксперт, но думал, что это может помочь кому-то, как я. Закончилось использованием Math.roundвместо. Увидеть ниже:
DecimalFormat df = new DecimalFormat("#.##");
double d = 0.7750;
System.out.println(" Double 0.7750 -> " +Double.valueOf(df.format(d)));
float f = 0.7750f;
System.out.println(" Float 0.7750f -> "+Float.valueOf(df.format(f)));
// change the RoundingMode
df.setRoundingMode(RoundingMode.HALF_UP);
System.out.println(" Rounding Up Double 0.7750 -> " +Double.valueOf(df.format(d)));
System.out.println(" Rounding Up Float 0.7750f -> " +Float.valueOf(df.format(f)));
Вывод:
Double 0.7750 -> 0.78
Float 0.7750f -> 0.77
Rounding Up Double 0.7750 -> 0.78
Rounding Up Float 0.7750f -> 0.77
Попробуй это:-
private static String getDecimalFormat(double value) {
String getValue = String.valueOf(value).split("[.]")[1];
if (getValue.length() == 1) {
return String.valueOf(value).split("[.]")[0] +
"."+ getValue.substring(0, 1) +
String.format("%0"+1+"d", 0);
} else {
return String.valueOf(value).split("[.]")[0]
+"." + getValue.substring(0, 2);
}
}
String.format(java.util.Locale.US,"%.2f", val);