从变量中按数字更改小数位 - JAVA [重复]
Posted
技术标签:
【中文标题】从变量中按数字更改小数位 - JAVA [重复]【英文标题】:Change the decimal places by number from variable - JAVA [duplicate] 【发布时间】:2020-02-29 17:08:11 【问题描述】:我需要用字符串格式对数字进行四舍五入。喜欢:
String output = String.format("%.10d",var);
但要注意的是小数位数取自变量,该变量由用户从控制器设置。
我需要帮助重写它,10 是我的小数位数变量。但我被困住了。
有什么想法吗?谢谢
【问题讨论】:
这能回答你的问题吗? How to Java String.format with a variable precision? 【参考方案1】:动态构建格式字符串:
double value = 12345.67890123456;
for (int decimals = 0; decimals <= 10; decimals++)
String output = String.format("%." + decimals + "f", value);
System.out.println(output);
输出
12346
12345.7
12345.68
12345.679
12345.6789
12345.67890
12345.678901
12345.6789012
12345.67890123
12345.678901235
12345.6789012346
或者,使用DecimalFormat
:
double value = 12345.67890123456;
DecimalFormat fmt = new DecimalFormat("0", DecimalFormatSymbols.getInstance(Locale.US));
for (int decimals = 0; decimals <= 10; decimals++)
fmt.setMinimumFractionDigits(decimals);
fmt.setMaximumFractionDigits(decimals);
String output = fmt.format(value);
System.out.println(output);
与上面的输出相同。
如您所见,它们都四舍五入到最接近的位置(也就是一半)。
如果要四舍五入,必须使用DecimalFormat
,并在循环前添加这一行更改默认RoundingMode
:
fmt.setRoundingMode(RoundingMode.UP);
输出
12346
12345.7
12345.68
12345.679
12345.6790
12345.67891
12345.678902
12345.6789013
12345.67890124
12345.678901235
12345.6789012346
【讨论】:
以上是关于从变量中按数字更改小数位 - JAVA [重复]的主要内容,如果未能解决你的问题,请参考以下文章