Могу ли я сделать это с System.out.print
?
Как напечатать поплавок с двумя десятичными знаками в Java?
Ответы (17)
Вы можете использовать файл printf
, например:
System.out.printf("%.2f", val);
Короче говоря, синтаксис %.2f
говорит Java вернуть вашу переменную (val
) с двумя десятичными знаками (.2
) в десятичном представлении числа с плавающей запятой (f
) с начала спецификатора формата (%
).
Помимо f
, вы можете использовать и другие символы преобразования:
d
: десятичное целое числоo
: восьмеричное целоеe
: число с плавающей запятой в экспоненциальном представлении
String.format(java.util.Locale.US,"%.2f", val);
- person Gomino; 02.03.2016
Locale.FRANCE
?
- person erickson; 27.05.2016
Locale.US
заходит слишком далеко. Если вам нужно жестко закодировать нейтральную локаль для складывания регистра, рендеринга чисел и т. д., укажите Locale.ROOT
. Это подходит для текста, который будет потребляться другой программой, а не отображаться для пользователей-людей. Для текста, представленного пользователю, учитывайте его языковой стандарт, независимо от того, указал ли он его явно или по умолчанию.
- person erickson; 27.05.2016
Вы можете использовать DecimalFormat
. Один из способов его использования:
DecimalFormat df = new DecimalFormat();
df.setMaximumFractionDigits(2);
System.out.println(df.format(decimalNumber));
Другой — построить его в формате #.##
.
Я нахожу все параметры форматирования менее читабельными, чем вызов методов форматирования, но это вопрос предпочтений.
System.out.printf("%.2f", value)
? Это все еще вокруг?
- person Anthony Forloney; 29.03.2010
DecimalFormat
ответов, я сразу подумал, что ошибаюсь, но спасибо за разъяснение.
- person Anthony Forloney; 29.03.2010
df.setMinimumFractionDigits(2);
, чтобы заставить две цифры
- person Terel; 20.03.2014
Я бы предложил использовать String.format(), если вам нужно значение как String
в вашем коде.
Например, вы можете использовать String.format()
следующим образом:
float myFloat = 2.001f;
String formattedString = String.format("%.02f", myFloat);
Вы можете использовать эти быстрые коды ниже, которые изменились в конце. Добавьте, сколько нулей относится к после точки
float y1 = 0.123456789;
DecimalFormat df = new DecimalFormat("#.00");
y1 = Float.valueOf(df.format(y1));
Переменная y1 раньше была равна 0,123456789. После кода превращается только в 0.12.
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);
Дополнительную информацию о строка формата printf.
Простой трюк состоит в том, чтобы сгенерировать более короткую версию вашей переменной, умножив ее, например, на 100
, округляем и снова делим на 100.0
. Таким образом вы создаете переменную с 2 десятичными знаками:
double new_variable = Math.round(old_variable*100) / 100.0;
Этот «дешевый трюк» всегда меня устраивал и работал на любом языке (я не Java-специалист, просто изучаю его).
Посмотрите 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
Чтобы напечатать число с плавающей запятой до 2 знаков после запятой в Java:
float f = (float)11/3;
System.out.print(String.format("%.2f",f));
ВЫХОД: 3,67
› используйте %.3f до трех знаков после запятой.
OK - str для плавания.
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)
Одна проблема, которая занимала меня в течение часа или больше, на 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
небольшая простая программа для демонстрации:
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);
Попробуй это:-
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);
}
}
DecimalFormat df = new DecimalFormat("0.00");
- person K.Sopheak; 28.12.2016