Floating point precision error in Java

I want to know what is the best way to fix precision errors in Java As shown in the following example, there is a precision error:

class FloatTest
{
  public static void main(String[] args)
  {
    Float number1 = 1.89f;

    for(int i = 11; i < 800; i*=2)
    {
      System.out.println("loop value: " + i);
      System.out.println(i*number1);
      System.out.println("");
    }
  }
}

The results displayed are:

In addition, if anyone can explain why it only starts at 11 and doubles its value every time I think all other values (or at least many) show the correct results

Problems like this give me a headache. I usually use a number formatter or put them in a string

Editor: as people say, I can use a double, but after trying, it seems that 1.89 as double 792 still outputs an error (the output is 1496.87999999999)

I think I will try other solutions, such as BigDecimal

Solution

If you really care about accuracy, you should use BigDecimal

http://download.oracle.com/javase/1 ,5.0/docs/api/java/math/BigDecimal. html

The content of this article comes from the network collection of netizens. It is used as a learning reference. The copyright belongs to the original author.
THE END
分享
二维码
< <上一篇
下一篇>>