Java 大十进制、精度和比例
我在应用程序中使用BigDecimal作为我的数字,例如,在JPA中。我做了一些关于“精度”和“尺度”的研究,但我不明白它们到底是什么 有人能给我解释一下大十进制值的“精度”和“刻度”的含义吗Java 大十进制、精度和比例,java,jpa,scale,precision,bigdecimal,Java,Jpa,Scale,Precision,Bigdecimal,我在应用程序中使用BigDecimal作为我的数字,例如,在JPA中。我做了一些关于“精度”和“尺度”的研究,但我不明白它们到底是什么 有人能给我解释一下大十进制值的“精度”和“刻度”的含义吗 @Column(precision = 11, scale = 2) 谢谢 引用: 精度是未标度值中的位数 及 如果为零或正,则刻度为小数点右侧的位数。如果为负数,则数字的未标度值乘以10,即标度的负数幂。例如,-3表示未缩放的值乘以1000 精度:有效位数总数 比例:小数点右侧的位数 有关详细信息
@Column(precision = 11, scale = 2)
谢谢 引用:
精度是未标度值中的位数
及
如果为零或正,则刻度为小数点右侧的位数。如果为负数,则数字的未标度值乘以10,即标度的负数幂。例如,-3表示未缩放的值乘以1000
- 精度:有效位数总数
- 比例:小数点右侧的位数
有关详细信息,请参见课堂文档。从您的示例注释中,小数点后的最大数字为2,小数点前的最大数字为9(共11位):
123456789,01
ABigDecimal
由两个值定义:任意精度整数和32位整数刻度。BigDecimal
的值定义为
精度:
是未标度值中的位数。
例如,对于数字123.45,返回的精度为5
因此,precision表示任意精度整数的长度。以下是一些比例相同但精度不同的数字示例:
- 12345/100000=0.12345//刻度=5,精度=5
- 12340/100000=0.1234//刻度=5,精度=4
- 1/100000=0.00001//刻度=5,精度=1
- 12345,刻度为5=0.12345
- 12345,刻度为4=1.2345
- 12345,刻度为0=12345
- 12345,刻度为-1=123450†
BigDecimal
的toString
方法根据刻度和精度
表现不同。(感谢@RudyVelthuis指出这一点。)
- 如果
,则只需按原样打印出整数李>scale==0
- 如果
,则始终使用电子符号(例如,5标度-1产生“5E+1”)标度<0
- 如果
和scale>=0
生成一个纯十进制数(例如10000000 scale 1生成“1000000.0”)precision-scale-1>=-6
- 否则,将使用E表示法,例如,10刻度8产生“1.0E-7”,因为
等于小于-6李>精度-刻度-1
- 19/100=0.19//整数=19,刻度=2,精度=2
- 1/1000=0.0001//整数=1,刻度=4,精度=1
java.math.BigDecimal
完全无关@javax.persistence.Column
不是JavaSE的一部分。这是JPA的主题。精度和比例是java.math.BigDecimal经常使用的术语,这是他用于计算的术语,例如JPA。他或她想知道在BigDecimal的上下文中它们是什么意思好吧。实际上,[12345,-1]
最好用1.2345E+5
来表示,这可能也是ToString
将返回的内容。另外,非常好的解释。很好的例子解释@RudyVelthuis谢谢,我添加了一节解释toString方法如何决定是否使用E+符号检查,我看到我写了toString
。这是Delphi语言,不是Java语言0.12345-这是六位数的总数,不是五位数。你能帮我吗