【问题标题】:How do I validate precision and scale with BigDecimal?如何使用 BigDecimal 验证精度和规模?
【发布时间】:2012-06-09 14:18:16
【问题描述】:

我正在尝试验证大小数的精度和小数位数。

我希望验证一个大小数不超过 10 的精度或 2 的小数位数。我尝试做一个 maxlength,这样该值就不会违反我的数据库长度限制,但无法得到那个工作。有人可以指出解决这个问题的方向吗?

【问题讨论】:

  • 可能像 NUMBER(10,2)(不过是基于 Oracle)?
  • 我们使用sybase,所以不太确定Oracle。我只是想用 if 语句在 java 中构建一个字段验证器来测试并确保提交的值不超过 10,2。

标签: java bigdecimal


【解决方案1】:

BigDecimal 类具有三个可能对此感兴趣的方法:

  • precision(),返回未缩放值的位数(例如,对于数字 123.45,返回的精度为 5)
  • scale(),正数时返回小数分隔符后的位数(scale()可以为负数,这种情况下,数字的未缩放值乘以十的负数次方。例如, -3 表示未缩放的值乘以 1000),
  • stripTrailingZeros(),它返回一个 BigDecimal,并从表示中删除所有尾随零。

例如,要计算给定BigDecimal b 的精度和比例,我们可以这样写:

BigDecimal noZero = b.stripTrailingZeros();
int scale = noZero.scale();
int precision = noZero.precision();    
if (scale < 0) { // Adjust for negative scale
    precision -= scale;
    scale = 0;        
}

【讨论】:

  • 这正是我要找的,我完全错过了 api 中的规模和精度。真丢人。
  • @Teetoo, @George - 你不认为if 块 - scale = 0;precision -= scale; 应该交换吗?
  • @Teetoo 我做了更改,查看它:)
猜你喜欢
  • 2016-05-27
  • 1970-01-01
  • 2012-07-18
  • 1970-01-01
  • 2016-03-01
  • 2013-03-05
  • 1970-01-01
  • 2020-05-02
  • 2020-07-28
相关资源
最近更新 更多