计算结果有问题,

新手上路,请多包涵

遇到一个很奇怪的问题

php:

$min = 18.9;
$param = 18.8;
echo $min - $param;

java:

import java.io.*;
class test  
{
    public static void main (String[] args) throws java.lang.Exception
    {
        System.out.println(18.9-18.8);
    }
}
输出:0.09999999999999787

????
搜了一下,好像是浮点数的原因,大家都是怎么解决的?
转换成整数的话,加减没问题,其他运算就麻烦了

阅读 3.5k
5 个回答
public class TestFloat {
    public static void main(String[] args) {
        BigDecimal bigDecimal = BigDecimal.valueOf(18.9);
        BigDecimal bigDecimal1 = BigDecimal.valueOf(18.8);
        System.out.println(bigDecimal.subtract(bigDecimal1));
    }
}

输出结果:

Connected to the target VM, address: '127.0.0.1:55538', transport: 'socket'
0.1
Disconnected from the target VM, address: '127.0.0.1:55538', transport: 'socket'

Process finished with exit code 0

可以使用BigDecimal类,至于结果计算错误的原因可以参考这篇文章

java的话用BigDecimal
PHP应该也有对应的math库
其实自己也可以做个简单实现来解决这种问题

const calc = (expression, digit = 4) => {
  const m = Math.pow(10, digit);
  return Math.round(expression * m) / m;
};

clipboard.png

有下面几种思路

  1. 按照精度转换为整数,例如价格精度为0.01的时候,计算单位*100,最后结果取整
  2. 普通计算,可以针对计算结果,使用round(计算结果, 精度)
  3. 复杂的科学计算可以使用BC Math库
撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题