【发布时间】:2015-07-22 12:23:50
【问题描述】:
我正在使用下面的代码捕捉显示float 带有两位小数的价格值。
NumberFormat FORMAT = new DecimalFormat("#####0.00");
float myFloatValue =\\I am able to fetch this value dynamically
String finalPrice = FORMAT.format(myFloatValue);
// I am using this String (finalPrice) for export xml purpose.
它似乎工作正常,但我注意到一些例子(如下所示)它不能正常工作并产生多于两位小数的价格。我无法再次复制它,我只能在日志文件中看到它。
finalPrice String 的一些示例输出:0.10999966、0.1800003、0.45999908。
谁能帮我从这些输出中猜出myFloatValue 的原始值?这样它将帮助我复制场景并修复它。
【问题讨论】:
-
你的例子的输入是什么?
-
这实际上是我的问题,我直接在日志中获取输出并且无法复制,所以我需要输入我的浮点值。
-
@VishalZanzrukia 我之前的回答是无效的,很抱歉。我无法复制这个问题,但是,如果它有帮助,如果您没有注意到,在您描述的三种情况下,以下四个数字是 0 或 9。是否有任何条件(if/while/for)来格式化数字,否则没有?
-
对此我唯一想到的是
double原始数据类型中众所周知的精度错误。但是DecimalFormatAPI 保证只返回模板中指定的位数。您确定日志中的数据来自DecimalFormat.format返回的值吗? -
首先,您使用浮点数(双精度也不是解决方案)来模拟价格。 不要将浮点数用于像金钱这样的小数,始终使用大数。 floats 而不是 doubles 甚至更糟,因为如果价格超过 1600 万,您将失去数字。其次,您的 DecimalFormat 似乎还可以,那么您使用的是什么 JDK 版本以及什么机器(Windows、Linux、Mac、Android?)
标签: java floating-point format decimalformat