gpt4 book ai didi

ruby - 对 BigDecimal 的一般强制转换

转载 作者:太空宇宙 更新时间:2023-11-03 16:31:12 25 4
gpt4 key购买 nike

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

我能得到的最接近的是通过以下代码片段:

def is_decimalizable?(coordinate)
!coordinate.to_d.zero?
end

当然,to_d 对无效强制转换返回零,这使得有效的类似零的类似数字的构造无法通过测试。不过,我在 BigDecimal 文档中真的看不到更好的方法。 (有一个 BigDecimal#coerce 方法并没有真正记录有用的用例。)

# 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

有人对此有更强大的解决方案吗?我使用 ruby​​2.0.0-p0 是为了它的值(value)。

最佳答案

在控制台中进行了大量修改后,我确定正则表达式确实是唯一的出路。我想知道 BigDecimal 的这种行为是否是一种疏忽,或者有一些我不知道的非常好的理由。

关于ruby - 对 BigDecimal 的一般强制转换,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15626758/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com