Java模数1(%1)返回近似值

时间:2016-11-11 07:04:20

标签: java modulus

我有示例代码

double k=3.14, l=0.5, m=1.3333;
        System.out.println(k+":"+k%1);
        System.out.println(l+":"+l%1);
        System.out.println(m+":"+m%1);

导致输出:

3.14:0.14000000000000012
0.5:0.5
1.3333:0.33329999999999993

为什么会这样?我期望x%1返回x?

值的非整数部分

1 个答案:

答案 0 :(得分:1)

请参阅Is floating point math broken?

  

二进制浮点数学是这样的。在大多数编程语言中,它基于IEEE 754标准。 JavaScript使用64位浮点表示,这与Java的双重表示相同。问题的关键在于数字以这种格式表示为2的幂的整数倍;有理数(例如0.1,即1/10),其分母不是2的幂,不能准确表示。