在java中,我想将任何double四舍五入为一个带2个小数位的字符串。我试过使用decimalformat,但是没有得到预期的结果。任何帮助都将不胜感激。
例如:i/p:3402100.5323
我想把它转换成:
订单号:34.02
我试过使用decimalformat(“##,##,###,##0.00”,新的decimalformatsymbols(locale.us)),但结果是3402100.53,而我希望它输出34.02
ps:如果i/p是34.02,我希望即使应用了格式,它也会保持不变
6条答案
按热度按时间x8goxv8g1#
看到了吗https://docs.oracle.com/javase/7/docs/api/java/lang/string.html#format(java.lang.string、%20java.lang.object…)和https://docs.oracle.com/javase/7/docs/api/java/util/formatter.html#syntax
vc9ivgsu2#
你可以用这个格式试试这个它的工作100%为我。
有用的链接
https://docs.oracle.com/javase/7/docs/api/java/util/formatter.html#syntax
xhv8bpkk3#
在我看来,这可以通过两个步骤来实现:
将数字转换为您定制的四舍五入(3402100.5323至34.021005323)。将输入除以10的幂,使其四舍五入为2位数。
然后可以漂亮地打印转换后的数字,以截断2位小数后的值(34.021005323到34.02)
输出:34.02
gblwokeq4#
我想你要找的是java.math.bigdecimal类(https://docs.oracle.com/javase/8/docs/api/java/math/bigdecimal.html).
在你的例子中,它看起来是这样的:
它可以通过基本上以十进制形式存储数字来替换双精度(尽管语法更复杂),这意味着您可以对其进行操作,并保持两位小数,避免四舍五入问题。
edit:仔细想想,这可能有点过头了,因为您只想得到一个具有舍入值的字符串,但我会把它留在那里以防万一。
xurqigkl5#
把一个数字变成完全不同的东西,自然不是decimalformat的工作。
要从代表3402100.5323的数字到字符串“34.02”,首先必须得到一个更接近“34.02”的数字。换句话说,先除以10000.0。
从那里开始,
String.format("%.2f")
这似乎是一条简单的路径:将任何double转换为字符串,但在小数点分隔符后使用的数字不能超过2位。如果你想让3400000.123变成“34.00”而不是“34”,你可以这样做String.format("%.02f")
强制零。请注意,如果您看到一个点或逗号作为分隔符,机器区域设置将指示。您可以通过显式地将区域设置传递给
format
.kxxlusnw6#
我不相信你可以实现你想要的(前4位数字转换成2位双精度小数点后2位)在一个单一的步骤。我将分解步骤,尝试一种方法:
将双精度输入转换为字符串
接下来,从字符串中删除小数点
然后,抓住你感兴趣的前4个数字
最后,插入一个小数点