Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/ruby/25.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何从Ruby BigDecimal对象中获得精度(小数点后的位数)?_Ruby - Fatal编程技术网

如何从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;