`

double 转 BigDecimal 失真问题

阅读更多

最近在看银行家算法的时候发现原博文中用的BigDecimal 有问题,所以总结了BigDecimal 失真问题,自己也总结了几种经常用的转换方式,并且列出来,以防以后忘记,代码如下

       double db = 211288.555;
        String str = "211288.555";
        BigDecimal rw = BigDecimal.valueOf(db);// 不失真
        BigDecimal rw2 = new BigDecimal(db);// 这种用法会失真,要小心
        BigDecimal rw3 = new BigDecimal(str);// 不失真
        BigDecimal rw4 = new BigDecimal(Double.valueOf(db));// 这种用法会失真,要小心
        System.out.println("rw==" + rw);
        System.out.println("rw2==" + rw2);
        System.out.println("rw3==" + rw3);
        System.out.println("rw4==" + rw4);

0
1
分享到:
评论

相关推荐

    BigDecimal向Double转换

    在Java编程语言中,BigDecimal是一...为了避免这些问题,可以通过将BigDecimal先转换为String再转换为Double的方式来保证数据的准确性。开发者应当根据具体的应用场景选择合适的转换策略,以确保程序的稳定性和准确性。

    string转bigdecimal类型.md

    string转bigdecimal类型

    bigdecimal转integer.docx

    `BigDecimal` 用于处理精确的浮点数运算,适合财务或金融计算,因为它可以避免浮点数计算中的精度问题。而 `Integer` 是 Java 中的整数类型,它只能存储整数值。在某些情况下,我们可能需要将 `BigDecimal` 对象转换...

    Java BigDecimal和double示例及相关问题解析

    Java BigDecimal和double示例及相关问题解析 在 Java 中,浮点数的表示形式有多种,包括 float 和 double 等,但是这些类型在进行计算时会出现精度问题,而 BigDecimal 则可以解决这种问题。本文将主要介绍 Java 中...

    string转bigdecimal类型、一行即可

    string转bigdecimal类型完成了string转bigdecimal类型的操作一行代码搞定

    bigdecimal

    `BigDecimal` 的出现就是为了解决这类问题。 #### 三、BigDecimal的基本操作 以下是一些常见的 `BigDecimal` 操作: 1. **加法**: 使用 `add()` 方法。 2. **减法**: 使用 `subtract()` 方法。 3. **乘法**: 使用...

    将 BigDecimal 类型转换为 Integer 类型.pdf

    除了 `intValue()` 和 `toBigInteger().intValueExact()`,BigDecimal 还提供了其他转换方法,如 `longValue()`、`doubleValue()` 等,以适应不同的需求。但是,同样需要注意这些方法可能引发的溢出或精度损失问题...

    Java中double类型下出现精度计算错误情况下出力方法

     要保证精度就要使用BigDecimal类,而且不能直接从double直接转BigDecimal,要将double转string再转BigDecimal。也就是不能使用BigDecimal(double val) 方法,你会发现没有效果。要使用BigDecimal(String val) 方法...

    BigDecimal工具类.docx

    BigDecimal工具类 BigDecimal工具类是Java中用于高精确处理常用数学运算的工具类。该工具类提供了多种精确的数学运算方法,包括加法、减法、乘法和除法等。 在BigDecimal工具类中,我们可以看到多个重载的方法,...

    BigDecimal类

    * 由于一般数值类型,例如 double,不能准确地代表 16 位有效数以上的数字,在使用 BigDecimal 时,应用 BigDecimal(String) 构造器创建对象才有意义。 * 不能使用传统的+、-、*、/等算术运算符直接对其对象进行数学...

    JS的高精度计算(BigDecimal)

    引用附件的JS,就可以轻松搞定JS的计算问题了。 使用例 <!-- function //+ alert(new BigDecimal("10").add(new BigDecimal("3E+10"))); //- alert(new BigDecimal("10").subtract(new BigDecimal("3E+10")));...

    javascript版BigDecimal类库

    为了解决这个问题,开发者们引入了`BigDecimal`类库的概念,它在Java中被广泛使用,用于进行高精度的算术运算。本文将详细介绍JavaScript版的`BigDecimal`类库,以及如何在JavaScript环境中实现精确计算。 ...

    java中BigDecimal的操作方法

    在进行商业计算时,由于浮点数(double和float)存在精度问题,不能保证准确的结果,因此通常推荐使用BigDecimal来确保计算的精确性。本文将深入探讨BigDecimal的基本操作、应用场景及注意事项。 首先,创建...

    Java Double 精度问题总结

    ### Java Double 精度问题总结 在Java编程语言中,`double` 类型是一种用于表示64位浮点数的原始数据类型。虽然 `double` 提供了相对较高的精度,但在涉及精确数学运算(特别是涉及到小数值)时,由于其内部采用二...

    BigDecimal.js.zip

    为了解决这个问题,开发者通常会引入第三方库,比如"BigDecimal.js"。这个库提供了一个名为`BigDecimal`的数据类型,用于实现大数运算,确保结果的精度不受损失。 "BigDecimal.js.zip"是一个压缩包,其中包含了...

    BigDecimal使用

    2. 创建 BigDecimal 对象:可以通过多种方式创建 BigDecimal 对象,例如将 double 或 String 类型的数值转换为 BigDecimal 对象。 3. 精确的加法运算:使用 BigDecimal 的 add 方法可以进行精确的加法运算,例如将...

    BigDecimal的计算

    - `BigDecimal.valueOf(double val)`:根据双精度浮点数创建一个 `BigDecimal` 实例。 ##### 3. 数学运算 `BigDecimal` 提供了一系列的方法来进行数学运算: - `add(BigDecimal augend)`:加法操作。 - `subtract...

    BigDecimal-CPP-master.zip

    标题中的"BigDecimal-CPP-master.zip"表明这是一个与BigDecimal类实现相关的C++项目压缩包。BigDecimal是一种可以处理任意...通过学习和使用`BigDecimal`类,开发者可以避免浮点数精度问题,从而获得更准确的计算结果。

    关于BigDecimal的构造函数与大小比较

    BigDecimal(double d) ,由于浮点运算的原因,要慎用第三种方式,否则就会得到上面的结果。所以,改用 java 代码 assertEquals(bd.compareTo(new BigDecimal("0.15")),0); 之后,测试顺利通过了。

    BigDecimal加减乘除计算

    初始化 BigDecimal 时,推荐使用字符串参数而非直接使用 double,因为 double 类型可能存在精度损失。例如: ```java BigDecimal num1 = new BigDecimal("0.005"); // 推荐 BigDecimal num2 = new BigDecimal...

Global site tag (gtag.js) - Google Analytics