在 Java 中,Double 转 BigDecimal 有几种常见方式,但一定要小心精度问题。下面按推荐程度给你说明。
String,再转 BigDecimal(最安全 ✅)double d = 3.14;
BigDecimal bd = new BigDecimal(String.valueOf(d));
或:
BigDecimal bd = new BigDecimal(Double.toString(d));
✅ 推荐原因
String 构造器能完整保留你看到的小数,避免二进制误差。
new BigDecimal(double)double d = 3.14;
BigDecimal bd = new BigDecimal(d);
❌ 问题
double 本身是二进制浮点数,可能已经不精确了:
System.out.println(new BigDecimal(3.14));
// 输出:3.140000000000000124344978758017532527446746826171875
⚠️ 除非你非常清楚自己在做什么,否则不要用这种方式
BigDecimal.valueOf(double)(推荐 ✅✅)double d = 3.14;
BigDecimal bd = BigDecimal.valueOf(d);
✅ 这是最推荐的方式之一
BigDecimal.valueOf(d) → new BigDecimal(Double.toString(d))| 方式 | 是否推荐 | 精度是否安全 |
|---|---|---|
new BigDecimal(double) |
❌ | ❌ |
new BigDecimal(String.valueOf(d)) |
✅ | ✅ |
BigDecimal.valueOf(d) |
✅✅ | ✅ |
BigDecimal bd = BigDecimal.valueOf(yourDouble);
如果你有金额、金融计算、精度要求高的场景,一定要用 BigDecimal,并且避免直接用 double 构造。
如果你愿意,我也可以帮你讲:
BigDecimal 的加减乘除double → BigDecimal 再转回 double 的坑免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。