【问题标题】:what is the unscaled value of BigDecimal?BigDecimal 的未缩放值是多少?
【发布时间】:2015-08-05 07:08:49
【问题描述】:

我正在阅读 BigDecimal 的文档,但我不明白 unscaled 的含义。谁能给我举例解释一下?谢谢。

这里是上下文

不可变的、任意精度的有符号十进制数。 BigDecimal 由任意精度整数 unscaled 值和 32 位整数刻度组成。如果为零或正数,则刻度是小数点右侧的位数。如果为负数,则将数字的未缩放值乘以 10 的负数次方。

【问题讨论】:

  • 那么,你有什么不明白的?
  • 我不明白 unscaled value 是什么意思。
  • 'unscaled' 是否意味着'没有十进制数字'而不是乘以十次幂?

标签: java bigdecimal


【解决方案1】:

BigDecimal 由一个任意精度的整数未缩放值和一个 32 位整数刻度组成

unscaled integer value of arbitrary precision: 87866787879879879768767554645434
scale: 3

如果为零或正数,则小数点为小数点右侧的位数。

actual decimal value: 87866787879879879768767554645.434

如果为负数,则将数字的未缩放值乘以 10 的负数次方。

unscaled integer value: 87866787879879879768767554645434
scale: -3
actual decimal value: 87866787879879879768767554645434000

【讨论】:

  • 因为数字很大在这里并不重要,所以使用较小的数字可能会更清楚,例如123456
  • 我想强调的是,这里的“整数”这个词必须是数学意义上的,而不是Java的意思。未缩放的值不是 32 位 Java int。
  • 那么什么是未缩放的整数。什么是缩放整数?
  • @ChongYoung:在这种情况下没有缩放整数。 unscaled 值是一个整数,scaled 值可能是也可能不是整数。
  • 缩放后的整数是结果:十进制值。即已应用比例以将其转换为十进制值的未缩放整数。就像一个满的杯子是你装满的空杯子,或者一个空的杯子是你倒空的满杯子。
【解决方案2】:

BigDecimal 是具有 32 位整数刻度的任意精度整数,即

例如-

  1. 878667 是一个未缩放的整数值,具有精度(计数 6的有效数字)。应用2的比例后,即-> 8786.67(输出)。应用 -2 的比例后,即 -> 87866700(输出)。
  2. 0.0000009 是一个缩放的整数值,精度为 1(有效数字的计数),比例为 7,因此未缩放的值 -> 9 即

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-10-08
    • 2021-02-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-01-24
    相关资源
    最近更新 更多