【发布时间】:2014-07-03 04:51:47
【问题描述】:
所以,我使这行代码返回参数中值的 10%。例如,如果给出的值为 7,则代码应返回 0.7。但它返回 0.7000000000000001。有什么想法为什么?代码如下:
public double calculateDiscount(double price){
double discount;
discount = price*0.10;
return discount;
}
我正在使用eclipse IDE,并且使用调试,我没有发现任何奇怪的东西,乘法只是返回了那个巨大的数字。
PS.:我知道我只能返回两位小数,但我想知道发生了什么。
PPS.:使用 /10 而不是 *0.10 可以正常工作。但是,正如我所说,我想知道为什么。
【问题讨论】:
-
double 和 float(几乎在任何语言中)不代表精确的浮点数,看看这个答案:stackoverflow.com/questions/6459335/…
-
就好像某些数字不能完全精确地表示一样。奇怪的。我想知道在谷歌上搜索是否会发现以前有人遇到过这个问题.. ;)
-
严肃的财务计算必须避免双重和浮动。并对所有其他数值数学算法保持警惕。
-
您的第一直觉是,Java 是一个近 20 年历史的成熟编程语言,这应该是罪魁祸首吗?
-
@SotiriosDelimanolis - 这就是他们所说的“青年的智慧”。根据定义,任何比我大的东西都是错误的:-)
标签: java multiplication