-1

可能重复:
浮点运算在 Java 中不产生精确结果 Java 中的
浮点数

请参阅下面的代码。

public class TestSum {

public static void main(String[] args) {
    float a = 4.8f;//try with 4.7f
    float b = 4.5f;//try with 4.6f
    double sum = a + b;
    System.out.println(sum);
 }
}

(4.8f+4.5f) sum=9.300000190734863

但是,当我尝试(4.7f+4.6f)sum = 9.299999237060547 再次给出时,

(1.8f+1.5f) sum=3.299999952316284.
(1.7f+1.6f) sum=3.3000001907348633.

但,

(2.8f+2.5f) sum=5.300000190734863.
(2.7f+2.6f) sum=5.300000190734863.

我想了解,这是如何工作的。提前致谢。

4

3 回答 3

3

您的问题在所有编程语言中都很常见,这是由于浮点数的有限精度造成的。

于 2013-01-23T09:50:43.633 回答
1

我想了解这是如何工作的。

查看信息。&浮点标签 Wiki上的链接(如下所列)。

那么最好的解决方案是什么......?

BigDecimal,或更常见的是,使用DecimalFormat.

于 2013-01-23T11:05:39.727 回答
0

感谢大家在这里帮助我。

但是我问了这个问题,以了解为什么这不会发生在 Python、Ruby 或 JavaScript 中,而是在 Java 中。

我认为一种可能的精度解决方案是使用 double

   public class TestSum {
   public static void main(String[] args){
   double a = 4.8d;
   double b = 4.5d;
   double sum = a + b;
   System.out.println(sum);
   }
   }
于 2013-01-23T11:11:45.430 回答