我的代码如下:
Number inputAmount = NumberFormat.getNumberInstance(Locale.FRANCE).parse("7,10");
double doubleValue = inputAmount.doubleValue();
int intValue = (int) (doubleValue * 100);
System.out.println("Input: " + inputAmount);
System.out.println("Double: " + doubleValue);
System.out.println("Integer: " + intValue);
输出:
Input: 7.1
Double: 7.1
Integer: 710
但是,当inputValue
为5,10时,输出为:
Input: 5.1
Double: 5.1
Integer: 509
这只发生在5,10和4,10。我知道它是由于双精度而发生的,但我无法弄清楚具体如何。 有什么想法吗?
答案 0 :(得分:0)
尝试改变:
int intValue = (int) (doubleValue * 100);
为:
int intValue = (int) (doubleValue * 100d);
你的代码已经相当简化,我认为当它增加时,内部转换可能会发生一些奇怪的事情。 100d将强制它在最终转换为int之前乘以两个双打。
答案 1 :(得分:0)
这里的问题是乘法5.1d * 100d
产生舍入误差,导致509.99999999999994d
。当你将这个双精度转换为整数时,结果显然是509
。
要了解这里发生了什么,请考虑以下事项:
double doubleValue = 5.1d * 100d; // rounding error...
System.out.println("Double: " + doubleValue);
int intValue = (int) doubleValue;
System.out.println("Integer: " + intValue);
输出:
Double: 509.99999999999994
Integer: 509