[英]How to print a float with 2 decimal places in Java?
我可以用System.out.print
來做嗎?
您可以使用printf
方法,如下所示:
System.out.printf("%.2f", val);
簡而言之, %.2f
語法告訴 Java 從格式說明符 ( %
) 的開頭以浮點數 ( f
) 的十進制表示形式返回帶有 2 個小數位 ( .2
) 的變量 ( val
)。
除了f
之外,您還可以使用其他轉換字符:
d
: 十進制整數o
: 八進制整數e
: 科學記數法中的浮點數您可以使用DecimalFormat
。 一種使用方法:
DecimalFormat df = new DecimalFormat();
df.setMaximumFractionDigits(2);
System.out.println(df.format(decimalNumber));
另一種是使用#.##
格式構建它。
我發現所有格式化選項都比調用格式化方法可讀性差,但這是一個偏好問題。
如果您需要將值作為代碼中的String
,我建議使用String.format() 。
例如,您可以通過以下方式使用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));
float f = 102.236569f;
DecimalFormat decimalFormat = new DecimalFormat("#.##");
float twoDigitsF = Float.valueOf(decimalFormat.format(f)); // output is 102.24
您可以使用下面的快速代碼,該代碼在最后自行更改。 在點后添加多少個零作為參考
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”。
一個簡單的技巧是通過將變量乘以例如100
、四舍五入並再次除以100.0
來生成變量的較短版本。 這樣您就可以生成一個變量,帶有2 個小數位:
double new_variable = Math.round(old_variable*100) / 100.0;
這個“便宜的技巧”對我來說總是足夠好,並且適用於任何語言(我不是 Java 人,只是在學習它)。
很多人都提到過DecimalFormat
。 但是,如果您有最新版本的 Java,也可以使用printf
:
System.out.printf("%1.2f", 3.14159D);
這是教程中的一個示例:
DecimalFormat myFormatter = new DecimalFormat(pattern);
String output = myFormatter.format(value);
System.out.println(value + " " + pattern + " " + output);
如果你選擇像“###.##”這樣的模式,你會得到兩個小數位,我認為這些值是四舍五入的。 您將需要查看鏈接以獲得所需的確切格式(例如,是否需要尾隨零)
下面是如何在 Java 中顯示帶有 2 個小數位的浮點數據輸出的代碼:
float ratingValue = 52.98929821f;
DecimalFormat decimalFormat = new DecimalFormat("#.##");
float twoDigitsFR = Float.valueOf(decimalFormat.format(ratingValue)); // output is 52.98
在 Java 中打印最多 2 個小數位的浮點數:
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
上有一個讓我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(",", ".");
如果您想確保獨立於用戶的 Locale,您將始終獲得/顯示一個“.”。 作為小數點分隔符。 如果你不想讓你的程序崩潰,如果你以后做一些像float f = Float.parseFloat(str);
這樣的轉換,這是必須的float f = Float.parseFloat(str);
public String getDecimalNumber(String number) {
Double d=Double.parseDouble(number);
return String.format("%.5f", d);
}
還要注意NumberFormatException
嘗試這個:-
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);
}
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.