BigDecimal,精度和规模

Posted

技术标签:

【中文标题】BigDecimal,精度和规模【英文标题】:BigDecimal, precision and scale 【发布时间】:2016-05-27 22:00:32 【问题描述】:

我在我的应用程序中使用 BigDecimal 作为我的数字,例如,使用 JPA。我对“精度”和“规模”这两个术语进行了一些研究,但我不明白它们到底是什么。

谁能解释一下 BigDecimal 值的“精度”和“比例”的含义?

@Column(precision = 11, scale = 2)

谢谢!

【问题讨论】:

这个问题与java.math.BigDecimal 完全无关。 @javax.persistence.Column 不是 Java SE 的一部分。它是 JPA 的主题。 精度和比例是 java.math.BigDecimal 常用的术语,这是他用于计算的术语,例如 JPA。 ISTM 他或她想知道它们在 BigDecimal 上下文中的含义。 【参考方案1】:

引用Javadoc:

精度是未缩放值的位数。

如果为零或正数,则小数点为小数点右侧的位数。如果为负数,则将数字的未缩放值乘以 10 的负数次方。例如,-3 的比例表示未缩放的值乘以 1000。

【讨论】:

【参考方案2】:

精度:有效位数的总数

刻度:小数点右边的位数

有关详细信息,请参阅BigDecimal 类文档。

【讨论】:

【参考方案3】:

从您的示例注释中,最大位数为小数点后 2 位和小数点前 9 位(共 11 位): 123456789,01

【讨论】:

你能帮我解决这个问题吗***.com/questions/54780779/…【参考方案4】:

BigDecimal 由两个值定义:任意精度整数和 32 位整数 scaleBigDecimal 的值定义为。

精度:

precision 是未缩放值的位数。 例如,对于数字 123.45,返回的精度为 5。

所以,precision表示任意精度整数的长度。以下是一些具有相同比例但不同精度的数字示例:

12345 / 100000 = 0.12345 // 比例 = 5,精度 = 5 12340 / 100000 = 0.1234 // 比例 = 5,精度 = 4 1 / 100000 = 0.00001 // 比例 = 5,精度 = 1

在数字等于0(即0.000)的特殊情况下,精度始终为1。

规模:

如果为零或正数,scale 是小数点右侧的位数。如果为负数,则将数字的未缩放值乘以 10 的负数次方。例如,-3 的比例表示未缩放的值乘以 1000。

这意味着‘BigDecimal’的整数值乘以。

以下是几个具有相同精度、不同比例的示例:

12345,比例为 5 = 0.12345 12345,比例为 4 = 1.2345 … 12345,比例为 0 = 12345 12345,比例 -1 = 123450

BigDecimal.toString:

BigDecimaltoString 方法根据比例和 precision 表现不同。 (感谢@RudyVelthuis 指出这一点。)

如果是scale == 0,整数会按原样打印出来。 如果scale < 0,则始终使用 E-Notation(例如,5 级 -1 产生“5E+1”) 如果 scale >= 0precision - scale -1 >= -6 生成一个纯十进制数(例如,10000000 比例 1 生成“1000000.0”) 否则,将使用 E 符号,例如10 比例 8 产生“1.0E-7”,因为 precision - scale -1 等于 小于 -6。

更多示例:

19/100 = 0.19 //整数=19,比例=2,精度=2 1/1000 = 0.0001 // 整数 = 1,比例 = 4,精度 = 1

【讨论】:

实际上,[12345, -1] 最好用1.2345E+5 表示,这可能也是ToString 会返回的内容。否则,非常好的解释。 很好的例子解释! 见鬼,我看到我写了ToString。那是 Delphi 说话,而不是 Java。 ;-) 0.12345 - 总共六位数,而不是五位数 你的例子和参考相互矛盾:参考读作If zero or positive, the scale is the number of digits to the right of the decimal point,但在你的例子中,你写了0.12345 // scale = 50.1234 // scale = 5

以上是关于BigDecimal,精度和规模的主要内容,如果未能解决你的问题,请参考以下文章

Java大数类介绍

bigdecimal的使用

BigDecimal类型比较大小

180615-精度计算BigDecimal

BigDecimal类处理高精度计算

BigDecimal 精度 和准确度问题