我总是被告知永远不要代表钱double或float类型,这次我向你提出问题:为什么?
我确信有一个很好的理由,我根本不知道它是什么.
可能重复:
将小数点后的双精度数加到2位有效数字
我在我的应用程序中处理了很多双值,是否有任何简单的方法来处理Java中十进制值的格式?
还有其他更好的办法吗?
DecimalFormat df = new DecimalFormat("#.##");
Run Code Online (Sandbox Code Playgroud)
我想要做的基本上是格式双值
23.59004 to 23.59
35.7 to 35.70
3.0 to 3.00
9 to 9.00
Run Code Online (Sandbox Code Playgroud) 我陷入了下面的情景:
如果x为1.5或更低,则最终结果为x = 1.如果x大于1.5,则x = 2.
输入数字为x/100.
例如:input = 0.015 => x = 1.5 => display x = 1.
我得到的问题是浮点数不准确.例如:input = 0.015但实际上它类似于0.01500000000000002.在这种情况下,x将是1.500000000000002,其大于1.5 =>显示输出是x = 2.
它是随机发生的,我不知道如何解决它.像0.5一样,1.5会给我正确的结果.但2.5,3.5,4.5,5.5会给我错误的结果.然后6.5将再次给我正确的结果.
我实现的代码如下:
float x = 0.015;
NumberFormat nf = DecimalFormat.getPercentInstance();
nf.setMaximumFractionDigits(0);
output = nf.format(x);
Run Code Online (Sandbox Code Playgroud)
所以取决于x,输出可能是对还是错.这是随机的.
我尝试使用Math.round,Math.floor,Math.ceils,但由于浮点数不可预测,因此它们似乎都不起作用.
对解决方案有何建议?
提前致谢.
我正在写一个显示数字阶乘的小程序.当我输入数字20时,我得到了数字2432902008176640000.
如何在Java中限制十进制数.
例如,数字2432902008176640000应为2432(限制4).
提前致谢.