【发布时间】:2021-05-07 04:37:42
【问题描述】:
我可以用System.out.print 做吗?
【问题讨论】:
标签: java formatting printf decimal-point
我可以用System.out.print 做吗?
【问题讨论】:
标签: java formatting printf decimal-point
您可以使用printf 方法,如下所示:
System.out.printf("%.2f", val);
简而言之,%.2f 语法告诉 Java 以浮点数 (f) 的十进制表示形式返回带有 2 个小数位 (.2) 的变量 (val)。格式说明符 (%)。
除了f之外,你还可以使用其他转换字符:
d:十进制整数o: 八进制整数e: 科学计数法中的浮点数【讨论】:
String.format(java.util.Locale.US,"%.2f", val);
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,我建议您使用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));
【讨论】:
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 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。但如果您有最新版本的 Java,您也可以使用 printf:
System.out.printf("%1.2f", 3.14159D);
See the docs on the Formatter for more information about the printf format string.
【讨论】:
一个简单的技巧是通过将变量与例如变量相乘来生成较短版本的变量。 100,将其四舍五入并再次除以100.0。这样您就可以生成一个具有2 个小数位的变量:
double new_variable = Math.round(old_variable*100) / 100.0;
这个“便宜的把戏”对我来说总是足够好,并且可以使用任何语言(我不是 Java 人,只是学习它)。
【讨论】:
这是教程中的一个示例:
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 上,我花了一个小时或更长时间的一个问题- 它以不同的方式处理双精度和浮点输入。即使更改 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);
}
}
【讨论】: