2014-09-10 40 views
-2
float a = (float) 3.32 ; 
    float b = (float) 4.32 ; 
    System.out.println(b%a); 

输出为1.0000002Java的浮点模误差

为什么?

+5

浮点类型是根据其性质不准确的。这样的小错误是不可避免的。 – Bohemian 2014-09-10 09:22:54

+0

http://en.wikipedia.org/wiki/Floating_point – user1516873 2014-09-10 09:23:06

+0

请参阅[每个程序员应该了解的浮点数](http://docs.oracle.com/cd/E19957-01/806-3568/ncg_goldberg.html )和http://floating-point-gui.de/basic/ – 2014-09-10 09:28:09

回答

2

首先如何声明浮点值作为变量?

float val=3.23f; 

关于您的结果。 这是float的典型性质。

如何得到正确答案?尝试这种方式

BigDecimal a = new BigDecimal("3.32") ; 
BigDecimal b = new BigDecimal("4.32") ; 
System.out.println(b.divideAndRemainder(a)[1]); // 1st element is remainder 

输出地说:

1 

您可能需要阅读有关divideAndRemainder()

+1

@downvoter,无法看到您的评论。 – 2014-09-10 09:29:11

+0

我已投稿风水:) – 2014-09-10 09:33:49