今天在跑测试用例的时候发现一个奇怪的问题。
dubbo num = 0.88;
BigDecimal b = new BigDecimal(num);
通过debug发现b的值是:0.88000000000000000444089209850062616169452667236328125
分析
由于二进制无法精确地表示十进制小数0.88,当编译器读到0.88的时候又转换为了8个字节的double类型,编译器只能找到一个比较接近的数字表示,于是0.88000000000000000444089209850062616169452667236328125
就出现了。也就是为啥阿里巴巴手册上说强制使用了:优先推荐入参为 String 的构造方法,或使用 BigDecimal 的 valueOf 方法
其实valueOf调用的还是toString方法。
解决
//(1)
dubbo num = 0.88;
BigDecimal b = new BigDecimal.valueOf(num);
//(2)
BigDecimal b = new BigDecimal("0.88");
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。