我有一个奇怪的数据类型问题:double。在双数据类型中计算不需要的部分
这里是我的代码:
public class Example {
/**
* @param args
*/
public static void main(String[] args) {
// TODO Auto-generated method stub
double a = 1.0;
for(int i =0; i<10;i++){
System.out.println("Number => " + a);
a += 0.1;
}
}
}
输出应该是:
Number => 1.0
Number => 1.1
Number => 1.2
Number => 1.3
Number => 1.4
Number => 1.5
Number => 1.6
Number => 1.7
Number => 1.8
Number => 1.9
但是,此代码示例的结果是:
Number => 1.0
Number => 1.1
Number => 1.2000000000000002
Number => 1.3000000000000003
Number => 1.4000000000000004
Number => 1.5000000000000004
Number => 1.6000000000000005
Number => 1.7000000000000006
Number => 1.8000000000000007
Number => 1.9000000000000008
我用EC lipse来编译这个代码块。我在netbeans上试过,但没有任何改变。
它应该如何发生?有任何想法吗?
Regards
这只是一个精度问题。 –
如果短小数的确切表示对您很重要,那么您应该使用BigDecimal,而不是double。 Double是基于二进制分数的,对十或其权力并不特别重要。这是一种更广泛的存储和处理大量数字的有用近似方法。 –
我正在寻找这个很长一段时间。几乎每个人都认为bigDecimal就是解决方案。但我只是想知道为什么会发生这种情况。顺便说一句,我的que是dup,我没有注意到其他问题。 – alicanbatur