【问题标题】:What does big decimal precision zero mean in javajava中的大十进制精度零是什么意思
【发布时间】:2016-09-29 04:09:52
【问题描述】:

我在 java 中将 500 视为 BigDecimal。 我变成了{・UnscaledValue = 5 ・Scale = -2 ・Precision = 0} 我真的不明白为什么精度为0。 我以为可能是1。 谁能解释一下?

【问题讨论】:

  • 请向我们展示您的代码。
  • 您是否有理由需要知道,或者只是好奇(我也会)?
  • 我投票结束这个问题,因为没有代码,不清楚你在问什么。这可能是个好问题,但它需要代码。

标签: java bigdecimal


【解决方案1】:

以最直接的方式构造的 500 的精度是 3。

scala> new java.math.BigDecimal("500").precision()
res0: Int = 3

如果你做了不同的事情,你必须展示代码,以便我们知道你做了什么。

precision的含义来自the documentation

精度是未缩放值的位数。零值的精度为 1。

【讨论】:

  • 如果 scale 为 -2,unscaledValue 为 5,那么显然存储为 5 * 10^2。那么,精度应该是 1,而不是 0,也不是 3。
  • 我也得到了 3。我也试过new BigDecimal(500.0),精度仍然是 3,比例尺是 0。我还没有弄清楚 OP 怎么可能得到精度为 0。跨度>
  • @OleV.V.:不要从浮点类型(双精度)实例化 BigDecimal。但是,如果你这样做,比如x = new BigDecimal("5e2") 或类似x = new BigDecimal("5").movePointRight(2); 的东西,或者通过简单的计算,你可以获得5unscaledValue-2scale。所以唯一的问题是:为什么精度是0。根据定义,它应该是1
  • 我想说的是:不管他是如何得到5unscaledValue-2scale。它是一个有效的 BigDecimal,表示数字 500,它的 precision() 应该3,它应该是 1
  • 感谢@RudyVelthuis 的建议。你对BigDecimal 的了解显然比我多得多。但是,对于 3 的精度,我承认我仍然比您更相信我的 Java 安装(对于 0 的精度,我开始相信 OP 犯了一个错误,我实际上从未从他的BigDecimal 得到精度为 0 ——现在我坦率地接近粗鲁)。
猜你喜欢
  • 2014-01-07
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-07-30
  • 2012-08-13
  • 2013-02-03
  • 2014-03-10
  • 1970-01-01
相关资源
最近更新 更多