Java Math.pow()舍入错误

Mat*_*ttS 1 java double

我遇到了(我怀疑的)舍入错误.

我有一个字符串,0.686357E-01我正在尝试将其转换为double.我已经能够使用该Pattern.split()函数将其拆分,并且我正在捕获基数和指数值.但是,一旦我尝试将它们恰当地相乘,我就会得到这样的结果:0.06863570000000001.

这是我的相关代码:

pattern = Pattern.compile("E\\+?");
String[] number = pattern.split(string);

double base = Double.parseDouble(number[0]);
int exponent = Integer.parseInt(number[1]);

number= base*Math.pow(10, exponent);
Run Code Online (Sandbox Code Playgroud)

那么,我该如何避免舍入误差呢?(有很多方法可以解决它,但是如果可以的话,我想知道如何解决这个问题)

谢谢.

Oli*_*rth 6

0.0686357不能完全表示为双精度值.

两种解决方案

  • 使用例如BigDecimal.
  • 转换回人类可读时,将显示的精度限制为一定数量的有效数字.


Ry-*_*Ry- 6

你不需要拆分它,Double.parseDouble可以处理那些类型的数字就好了.

double number = Double.parseDouble("0.686357E-01");
Run Code Online (Sandbox Code Playgroud)

看到?有用!