Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/heroku/2.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 我可以通过以下代码片段获得最接近的结果: def is_decimalizable?(coordinate) !coordinate.to_d.zero? end 当然,to_d为无效强制返回零,这使得有效的类零数字结构无法通过测试。不过,在BigDecimal文档中,我真的找不到更好的方法。(有一种BigDecimal#胁迫方法不能真正记录有用的用例。) 有谁能找到更可靠的解决方案吗?我使用ruby2.0.0-

我正在验证一些地理空间数据,需要将其他数据类型强制转换为BigDecimal

我可以通过以下代码片段获得最接近的结果:

def is_decimalizable?(coordinate)
  !coordinate.to_d.zero?
end
当然,
to_d
为无效强制返回零,这使得有效的类零数字结构无法通过测试。不过,在
BigDecimal
文档中,我真的找不到更好的方法。(有一种
BigDecimal#胁迫
方法不能真正记录有用的用例。)


有谁能找到更可靠的解决方案吗?我使用ruby2.0.0-p0是为了它的价值。

在console中进行了大量的修补之后,我确定Regex确实是唯一的选择。我想知道
BigDecimal
的这种行为是一种疏忽,还是有一些我不知道的很好的理由。

哇,多么不一致的PITA啊
Float('pancakes')
引发异常,但
BigDecimal('pancakes')
返回零。你有没有发现这个问题?我认为一个丑陋的混搭的
是一个
响应
,正则表达式将是你能得到的最好的。我最终完全使用了一个正则表达式。我很喜欢一种基于方法的方法,但没有找到其他真正的替代方法。我认为正则表达式是你能得到的最好的方法,可惜
BigDecimal(x)
的行为如此无用。如果你愿意,你可以回答你的问题并接受这个答案,这可能比不回答要好。
# Good:
is_decimalizable?(-100)        #=> true
is_decimalizable?('-100')      #=> true
is_decimalizable?(-100.0)      #=> true
is_decimalizable?('-100.0')    #=> true
is_decimalizable?('-100.0lng') #=> true
bigd = BigDecimal.new('0.1')
is_decimalizable?(bigd)        #=> true

is_decimalizable?('asdf')      #=> false

# Bad:
is_decimalizable?(0)          #=> false
is_decimalizable?('0')        #=> false
is_decimalizable?(0.0)        #=> false
is_decimalizable?('0.0')      #=> false
is_decimalizable?('0.0lng')   #=> false
bigd = BigDecimal.new('0.0')
is_decimalizable?(bigd)       #=> false