`
wing123
  • 浏览: 799837 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

BigDecimal除法错误:Non-terminating decimal expansion

UP 
阅读更多

Non-terminating decimal expansion; no exact representable decimal result.

 

由于需要处理精度比较高的浮点数,所以弃用double类型,改用BigDecimal类来进行数值处理。

 

在加减乘时都没有出现问题,但是到除法运算时,提示了如下错误:

 

大概的意思是“无法结束的除法表达式;没有精确的除结果”。我当时输入的10/3,结果应该是3.3333....333。

于是在网上找资料,发现我原来的处理方式有问题。

 

BigDecimal num1 = new BigDecimal("10");

BigDecimal num2 = new BigDecimal("3");

BigDecimal num3 = num1.divide(num2);

 

其实devide的函数定义如下

 

BigDecimal.divide(BigDecimal divisor, int scale, RoundingMode roundingMode) ;

 

scale为小数位数;

 

roundingMode为小数模式;

ROUND_CEILING

 

如果 BigDecimal 是正的,则做 ROUND_UP 操作;如果为负,则做 ROUND_DOWN 操作。

ROUND_DOWN

 

从不在舍弃(即截断)的小数之前增加数字。

ROUND_FLOOR

 

如果 BigDecimal 为正,则作 ROUND_UP ;如果为负,则作 ROUND_DOWN 。

ROUND_HALF_DOWN

 

若舍弃部分> .5,则作 ROUND_UP;否则,作 ROUND_DOWN 。

ROUND_HALF_EVEN

 

如果舍弃部分左边的数字为奇数,则作 ROUND_HALF_UP ;如果它为偶数,则作 ROUND_HALF_DOWN 。

ROUND_HALF_UP

 

若舍弃部分>=.5,则作 ROUND_UP ;否则,作 ROUND_DOWN 。

ROUND_UNNECESSARY

 

该“伪舍入模式”实际是指明所要求的操作必须是精确的,,因此不需要舍入操作。

ROUND_UP

 

总是在非 0 舍弃小数(即截断)之前增加数字。

 

写成如下便可通过

 

BigDecimal num3 = num1.divide(num2,10,BigDecimal.ROUND_HALF_UP);

 

 

 

分享到:
评论

相关推荐

    BigDecimal.js.zip

    "BigDecimal.js.zip"是一个压缩包,其中包含了"BigDecimal-all-last.min.js"文件。这个文件是BigDecimal.js库的最小化(minified)版本,旨在减小代码体积,提高网页加载速度。"min.js"通常表示经过压缩和混淆处理,...

    高精度JSBigDecimal运算

    这个库可能包括了加法、减法、乘法、除法以及比较、取模等多种操作,确保在执行这些操作时不会丢失精度。同时,它可能还支持大数的四舍五入、舍去尾数等处理,以满足各种复杂的计算需求。 `mathcontext2.js`文件很...

    javascript版BigDecimal类库

    2. **算术操作**:提供加法(`add`)、减法(`subtract`)、乘法(`multiply`)、除法(`divide`)等基本算术运算,这些操作能确保结果的精度不受JavaScript Number类型的限制。 3. **比较操作**:支持小于(`lt`)...

    详谈Java中BigDecimal的一个除法异常

    异常信息 "Non-terminating decimal expansion; no exact representable decimal result." 提示我们,当前的除法运算会导致无限循环的小数部分,Java无法为这样的结果找到一个精确的`BigDecimal`表示。为了解决这个...

    js-big-decimal.min.js

    js 处理大数据计算,bigdecimal的工具包

    开源项目-txjmp-decimal4.zip

    1. **高精度**:Decimal4使用整数数组存储十进制数,支持任意长度的小数部分,极大地提高了数值计算的精度,避免了浮点数运算中的误差。 2. **操作丰富**:提供加减乘除、比较、取模、幂运算等基本数学操作,并可能...

    BigDecimal的计算

    - `divide(BigDecimal divisor)`:除法操作。 ##### 4. 精度设置与舍入模式 在进行数学运算时,可以通过 `setScale(int newScale, RoundingMode roundingMode)` 方法来指定结果的精度和舍入模式。常用的舍入模式...

    rust-decimal:用​​纯Rust编写的十进制实现,适合财务计算

    2. **运算符重载**:库中的`Decimal`结构体支持常见的数学运算符,如加法、减法、乘法、除法以及比较操作,使得代码更加简洁易读。 3. **错误处理**:在执行可能导致错误的操作(如除以零)时,`rust-decimal`会...

    wide-decimal:Wide-Decimal实现了一个通用的C ++模板,用于最多约一百万个数字的大十进制浮点类型

    宽十进制宽十进制为扩展精度十进制浮点类型实现通用C ++模板。 此C ++模板仅标头库实现了dec101_t大十进制浮点类型,例如dec101_t , dec10001_t , dec1000001_t等,其本质上可以像常规的内置浮点类型一样使用。...

    decimal.js-light:decimal.js 的轻量版本,JavaScript 的任意精度 Decimal 类型

    的轻量版本, 的任意精度 Decimal 类型。 这个库是最新的库家族: 、 、 和decimal.js-light 。 该 API 或多或少是decimal.js的 API 的一个子集。 这个库和decimal.js之间的差异缩小后的decimal.js 的大小:32.1 KB...

    kmulti-bignumber:Kotlin多平台BigDecimal和BigInteger库

    kmulti-bignumber为BigDecimal和BigInteger类型提供了多平台expect声明和actual实现。 下载 repositories { maven { url "https://dl.bintray.com/kmulti/kmulti-bignumber" } } 每个Kotlin模块分别使用以下依赖...

    java小结

    - **`BigDecimal`**: 支持任意精度的小数运算。 - 这两个类位于`java.math`包中,适用于需要高精度计算的场景。 #### 小结 通过以上内容,我们对Java的基础知识有了更深入的理解。了解这些基础知识对于编程非常...

    SQL Server数据库与Java类型对照.doc

    - `decimal`, `money`, `smallmoney`, `numeric`: 使用 `java.math.BigDecimal` 类来表示。 - `real`: 使用 `java.lang.Float` 类来表示。 #### 4. 布尔值 - **SQL Server 数据库类型**: `bit` - **Java 对应类型...

    BigDecimal类

    BigDecimal 类详解 BigDecimal 类是 Java 中的一种数值类型,主要用于处理超过 16 位有效数字的数值运算。该类提供了多种构造器和方法,用于创建和操作 BigDecimal 对象。 构造器 BigDecimal 类提供了四种构造器...

    JS的高精度计算(BigDecimal)

    alert(new BigDecimal("10").add(new BigDecimal("3E+10"))); //- alert(new BigDecimal("10").subtract(new BigDecimal("3E+10"))); //* alert(new BigDecimal("10").multiply(new BigDecimal("3E+10"))); // / ...

    BigDecimal-CPP-master.zip

    标题中的"BigDecimal-CPP-master.zip"表明这是一个与BigDecimal类实现相关的C++项目压缩包。BigDecimal是一种可以处理任意精度的十进制浮点数的数据类型,它通常用于金融或会计等需要高精度计算的领域,因为在这些...

    grails入门经典

    - `BigDecimal distance`:距离。 - `BigDecimal cost`:费用。 - `Integer maxRunners`:最大参赛人数,默认值为 100000。 - **约束**: - `name` 不允许为空且最大长度为 50。 - `startDate` 必须晚于当前...

    BigDecimal使用

    6. 精确的除法运算:使用 BigDecimal 的 divide 方法可以进行精确的除法运算,例如将两个 BigDecimal 对象相除并返回结果。需要注意的是,除法运算可能会出现无限循环的小数,为了避免这种情况,可以使用 scale 参数...

    Java对BigDecimal常用方法的归类 -计算机等级考试-考试吧

    JAVA基础:java.math.BigDecimal的使用方法. JAVA基础:java.math.BigDecimal的使用方法.

    DecimalFormat精度解决,商业运算精度问题

    - `divide(BigDecimal divisor)`: 除法。 ```java BigDecimal bd3 = bd1.add(bd2); BigDecimal bd4 = bd1.subtract(bd2); BigDecimal bd5 = bd1.multiply(bd2); BigDecimal bd6 = bd1.divide(bd2, 2, ...

Global site tag (gtag.js) - Google Analytics