Відповіді:
Ви можете скористатися таким 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);
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);
Докладнішу інформацію про рядок формату printf див. У Документах на Форматорі .
Простий трюк - створити більш коротку версію змінної, помноживши її, наприклад 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
ОК - 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)
невелика проста програма для демонстрації:
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);