# BigDecimal(double)

#### “BigDecimal(double)” should not be used

Because of floating point imprecision, you’re unlikely to get the value you expect from the BigDecimal(double) constructor.

The results of this constructor can be somewhat unpredictable. One might assume that writing new BigDecimal(0.1) in Java creates a BigDecimal which is exactly equal to 0.1 (an unscaled value of 1, with a scale of 1), but it is actually equal to 0.1000000000000000055511151231257827021181583404541015625. This is because 0.1 cannot be represented exactly as a double (or, for that matter, as a binary fraction of any finite length). Thus, the value that is being passed in to the constructor is not exactly equal to 0.1, appearances notwithstanding.

Instead, you should use BigDecimal.valueOf, which uses a string under the covers to eliminate floating point rounding errors.

Noncompliant Code Example

double d = 1.1;

BigDecimal bd1 = new BigDecimal(d); // Noncompliant; see comment above
BigDecimal bd2 = new BigDecimal(1.1); // Noncompliant; same result

Compliant Solution

double d = 1.1;

BigDecimal bd1 = BigDecimal.valueOf(d);
BigDecimal bd2 = BigDecimal.valueOf(1.1);

• 本文已收录于以下专栏：

## BigDecimal

package testaa; import java.math.BigDecimal; public class test01 { public static void main(Strin...

## BigDecimal向Double转换

• 2017年06月22日 16:44
• 12KB
• 下载

## Java精确计算，用BigDecimal来处理int、double、float等之间的计算

1、先看我遇到的问题：计算3乘以4.9的值，正常来说答案应该是14.7，但是如果你用下面的代码执行完之后答案是： package com.acconsys.plugin.test; public...

## Java之浮点四则运算工具类-（double/float转化为BigDecimal）

package zmx.util; import java.math.BigDecimal; public class ArithUtil {  // 源文件Arith.java：  /** ...

## BigDecimal类——解决double精度丢失

/* BigDecimal类 * * 现象：java中double类型计算时可能出现精度丢失问题。比如在对一系列double数值进行累加的时候：3.41+5.2+56.2+23.3+... （这...
• rexih
• 2015年03月03日 15:33
• 502

## Java浮点数float，bigdecimal和double精确计算的精度误差问题总结

1、float整数计算误差 案例：会员积分字段采用float类型，导致计算会员积分时，7位整数的数据计算结果出现误差。 原因：超出float精度范围，无法精确计算。 float和double的精...
• ShareUs
• 2016年05月17日 15:48
• 3375

## JAVA BigDecimal的构造double类型

BigDecimal activePrice = new BigDecimal(4).multiply(new BigDecimal(0.01)); 开发过程中遇到的这样的问题，以上active...

举报原因： 您举报文章：BigDecimal(double) 色情 政治 抄袭 广告 招聘 骂人 其他 (最多只允许输入30个字)