专栏名称: 大淘宝技术
淘系技术官方账号
今天看啥  ›  专栏  ›  大淘宝技术

Java编程中的隐秘陷阱与解决之道

大淘宝技术  · 公众号  ·  · 2024-08-23 19:57

文章预览

本文主要是日常业务开发中自身碰到过跟常识不一致的坑,问题虽然基础,但却可能造成比较大的线上问题。 转BigDecimal类型时精度丢失 public class Test { public static void main ( String[] args ) { BigDecimal bigDecimal = new BigDecimal( 0.1 d); System. out .println(bigDecimal); } } 以上代码本认为输出的是BigDecimal类型的0.1,但输出的却是: 0 .1000000000000000055511151231257827021181583404541015625 出现这种情况的原因是,当我们用new BigDecimal(0.1)创建对象是,会调用BigDecimal以下构造方法: public BigDecimal(double val ) { this ( val ,MathContext.UNLIMITED); } double计算的时候会把数值转换成二进制,而0.1转换成二进制是无法除尽的,所以就带了一大串小数,所以最安全的做法还是: BigDecimal bigDecimal = BigDecimal.valueOf( 0 . 1d ); 在这个方法中,会把double先转为string进行计算: public ………………………………

原文地址:访问原文地址
快照地址: 访问文章快照
总结与预览地址:访问总结与预览