如何从Ruby BigDecimal对象中获得精度(小数点后的位数)?
为新的如何从Ruby BigDecimal对象中获得精度(小数点后的位数)?,ruby,Ruby,为新的BigDecimal对象提供以下表达式: b = BigDecimal.new("3.3") 如何获得已定义的精度?我想知道一种返回1的方法,因为小数点后有1位数字。我这样问是因为b.精度或b.数字不起作用 ,处理此类信息的方法名称为。假设一个BigDecimal对象来自数据库,我不知道该数据库对象的精度。我试过以下方法,但对我的情况似乎没有用 b = BigDecimal.new(3.14, 2) b.precs => [18, 27] 如何检索2信息/参数?在Ruby 2.
BigDecimal
对象提供以下表达式:
b = BigDecimal.new("3.3")
如何获得已定义的精度?我想知道一种返回1
的方法,因为小数点后有1位数字。我这样问是因为b.精度
或b.数字
不起作用
,处理此类信息的方法名称为。假设一个
BigDecimal
对象来自数据库,我不知道该数据库对象的精度。我试过以下方法,但对我的情况似乎没有用
b = BigDecimal.new(3.14, 2)
b.precs
=> [18, 27]
如何检索2
信息/参数?在Ruby 2.2.2中(我猜,在以前的版本中),您无法获取
支持给定的精度。那是
因为它在一些计算中使用;只有这些结果
计算是存储的。此文档注释是一条线索:
计算中使用的实际有效位数为
通常大于指定的数字
让我们看看源代码,看看发生了什么。
提取参数,执行一些限制和类型检查,并调用
VpAlloc。mf将digits参数保存为BigDecimal::new:
return VpAlloc(mf, RSTRING_PTR(iniValue));
在,mf得到
重命名为mx:
MxAlloc做的第一件事是将mx(精度)四舍五入到
基本参数的最近倍数图:
mx = (mx + BASE_FIG - 1) / BASE_FIG; /* Determine allocation unit. */
if (mx == 0) ++mx;
基础图相当于,它有一个平台
38、19、9、4或2的从属值
在将mx存储到数据库之前,还需要对其进行进一步计算
正在创建BigDecimal,但我们已经可以看到
传递给::new的参数已销毁且不可恢复。您猜的是这些方法名吗?提示::)不,我只是在文档中迷失了方向。不过,我已经更新了问题,使其更具说服力precise@AgostinoX我试图编辑你的问题,最明显的是从标题中删除了“Rails”。如果可能,请列出您正在使用的Ruby版本。另外,在第一个示例中,是否希望将
“3.3”
作为字符串参数?@HunterStevens BigDecimal将接受string@WayneConrad现在就看这个。非常感谢。
mx = (mx + BASE_FIG - 1) / BASE_FIG; /* Determine allocation unit. */
if (mx == 0) ++mx;