我已閱讀這些:爲什麼浮點運算在某些語言中顯示不同?
他們解釋 「如何」。我想知道爲什麼它在這些語言中有所不同。考慮到相同的投入,我期望得到類似的結果
test.js
#!/usr/bin/env node
var nine = 9.0;
var pointOhOhOne = 0.001;
var result = nine * pointOhOhOne;
console.log(result);
test.java
public class test {
public static void main(String[] argv) {
double nine = 9.0d;
double pointOhOhOne = 0.001d;
double result = nine * pointOhOhOne;
System.out.println(result);
}
}
test.c的
#include "stdio.h"
int main() {
double nine = 9.0;
double pointOhOhOne = 0.001;
double result = nine * pointOhOhOne;
printf("%f", result);
}
test.rb
#!/usr/bin/env ruby
nine = 9.0
pointOhOhOne = 0.001
result = nine * pointOhOhOne
print result
個test.py
#!/usr/bin/env python
nine = 9.0
pointOhOhOne = 0.001
result = nine * pointOhOhOne
print result
結果:
ruby 0.009000000000000001
python 0.009
node 0.009000000000000001
java 0.009000000000000001
c 0.009000
要點:https://gist.github.com/reklis/6694ad5fb01991a79a1a
也許不同的語言都會得到相同的答案,但是它們顯示的方式是不同的。例如,你可以使用'decimal'模塊在Python中獲得更多的打印準確性。 '進口小數;打印decimal.Decimal(9.0 * 0.001)'給出'0.009000000000000001054711873393898713402450084686279296875'。 – Kevin 2014-10-02 20:20:19
由於您實際上並沒有測試任何值是否等於任何特定值,因此您的問題實際上是爲什麼*表示法不同? – DSM 2014-10-02 20:20:43
默認情況下它看起來像C/C + [打印6位有效數字](http://stackoverflow.com/questions/20135901/c-cout-double-not-printing-decimal-places)。 – rgettman 2014-10-02 20:21:38