在处理长度,价格等数据时,我们总会用到BigDecimal。BigDecimal有很多的好处,但是我们在调用其构造函数的时候,也要选好参数,否则可能会得出错误的结果。
BigDecimal的构造方法常用的可以传double和String作为参数,平常如果不注意的话,会以为传个0.1d和”0.1”进去,得到的结果是一样的。但事实上,结果却出乎意料。我们可以做个简单的测试:
public static void main(String[] args) {
BigDecimal doubled = new BigDecimal(0.1d);
BigDecimal stringd = new BigDecimal("0.1");
System.out.println(doubled);
System.out.println(stringd);
}
得到的结果是:
0.1000000000000000055511151231257827021181583404541015625
0.1
至于为何传double进去会得到那样的结果,深究也没意义。对于开发者而言,重要的是,如果你有个double型的数值,那么最好先将其转化为Stirng,通过Double.toString(double)方法,再传参进去,这样得到的值才更准确
分享到:
相关推荐
然而,在某些情况下,我们可能需要将BigDecimal类型的值转换为Double类型,比如为了与一些只接受基本数据类型或其包装类的方法参数兼容,或者进行一些基于Double的数学运算等。本文将详细介绍如何在Java中实现...
* 由于一般数值类型,例如 double,不能准确地代表 16 位有效数以上的数字,在使用 BigDecimal 时,应用 BigDecimal(String) 构造器创建对象才有意义。 * 不能使用传统的+、-、*、/等算术运算符直接对其对象进行数学...
1. **创建实例**:可以通过`new BigDecimal(String)`构造函数创建一个`BigDecimal`对象,字符串参数代表十进制数值。例如,`new BigDecimal("123.45")`。 2. **基本运算**:`BigDecimal`提供了加法(`add()`), 减法...
Java BigDecimal和double示例及相关问题解析 在 Java 中,浮点数的表示形式有多种,包括 float 和 double 等,但是这些类型在进行计算时会出现精度问题,而 BigDecimal 则可以解决这种问题。本文将主要介绍 Java 中...
首先,创建BigDecimal对象时,推荐使用字符串(String)构造函数而不是double。例如: ```java BigDecimal b = new BigDecimal("12.000001"); ``` 这是因为直接使用double构造BigDecimal可能会导致精度损失,如以下...
此方法接收两个参数:`constructionFraction` 和 `value`。`constructionFraction` 用于决定如何处理小数部分。如果 `constructionFraction` 的值为 `CommonConstant.STR_ONE`,则采用向下取整的方式;如果为 `...
4. **构造器灵活性**:`BigDecimal`的构造器支持接收多种类型的参数,比如`double`和`String`,这使得用户可以根据不同的需求选择合适的构造方式。 #### 二、常见构造方法及使用 1. **使用字符串构造**:这是推荐...
BigDecimal有四种构造方法,但是我们最常用的两种是:BigDecimal(double val)和BigDecimal(String val)。其中,BigDecimal(double val)将一个double类型的变量转换为BigDecimal,而BigDecimal(String val)将一个字符...
另两个是BigDecimal(double val)和BigDecimal(String val)。这两个方法的API描述相当明确,通常情况下,使用BigDecimal(double val)方法更方便一些。但是,需要注意的是,使用这个方法可能会出现问题,因为double...
创建BigDecimal对象有多种方法,包括使用double类型的构造方法、String类型的构造方法和静态方法valueOf()。但是,不建议使用double类型的构造方法,因为它不能精确地得到相应的值。推荐使用String类型的构造方法,...
- 使用`Double.toString(dValue)`将浮点数转换为字符串形式,然后通过`BigDecimal`构造函数创建一个`BigDecimal`对象。 - 使用`divide`方法将`BigDecimal`对象除以1,并指定保留的小数位数`scale`以及舍入模式`...
这两个构造函数看上去没什么太大区别,但是正像API描述中说:利用double作为参数的构造函数,无法精确构造一个BigDecimal对象,需要自己指定一个上下文的环境,也就是指定精确位。而利用String对象作为参数传入的...
BigDecimal 有多种构造函数,其中 double 和 String 是两个常用的构造函数。double 构造函数的结果有一定的不可预知性,例如 new BigDecimal(0.1) 不等于 0.1,而是等于 0....
创建`BigDecimal`对象通常有两种方式,一是通过`new BigDecimal(String)`构造器,二是通过`BigDecimal.valueOf(double)`方法。前者接受一个字符串,后者接受一个double值。但需要注意的是,从`double`转换成`...
在Java编程语言中,数值类型如`double`和`float`虽然方便进行浮点数运算,但它们在处理精度上存在一定的局限性。...在使用`BigDecimal`时,需要注意其构造方法和算术操作,以确保数值的精确表示和计算。
在Java编程中,进行高精度的数学计算时,通常会使用`java.math.BigDecimal`类,因为Java中的简单数据类型如`float`和`double`在处理大数或精确计算时可能会出现误差。`BigDecimal`类提供了加减乘除等运算方法,确保...
- `BigDecimal(String val)`:推荐使用此构造方法,因为它能确保按照字符串提供的精确值来创建BigDecimal对象。 3. **加法操作**: `BigDecimal`的加法操作是通过`add()`方法实现的。在示例中,`a.add(b)`并没有...
`BigDecimal`提供了丰富的构造函数和方法来支持高精度计算。 2. **避免直接比较浮点数**:不要直接比较两个浮点数是否相等,而是应该比较它们之间的差值是否在一个很小的范围内。 3. **使用`Math`类中的方法**:...
正确的方法是先将`double`转换为`String`,然后再用`BigDecimal(String val)`构造器创建`BigDecimal`对象。以下是使用`BigDecimal`进行`double`类型四则运算的例子: 1. 相加: ```java public static double add...
`BigDecimal` 的构造函数接受各种类型的参数,包括 `String`、`BigInteger`、`int`、`long` 或 `double`,并根据这些值创建 `BigDecimal` 对象。 此外,`BigDecimal` 还提供了调整小数位数的方法 `setScale()`,...