如何将包含"5.32"
或"100"
等美元金额的字符串转换为美分的整数金额,例如532
或10000
?
我有以下解决方案:
dollar_amount_string = "5.32"
dollar_amount_bigdecimal = BigDecimal.new(dollar_amount_string)
cents_amount_bigdecimal = dollar_amount_bigdecimal * BigDecimal.new(100)
cents_amount_int = cents_amount_bigdecimal.to_i
但似乎很不稳定。我想确定,因为这将是PayPal API的输入。
我也尝试过金钱宝石,但它无法将字符串作为输入。
答案 0 :(得分:16)
您可以使用String#to_r("到理性")来避免舍入错误。
def dollars_to_cents(dollars)
(100 * dollars.to_r).to_i
end
dollars_to_cents("12")
#=> 1200
dollars_to_cents("10.25")
#=> 1025
dollars_to_cents("-10.25")
#=> -1025
dollars_to_cents("-0")
#=> 0
答案 1 :(得分:3)
d, c = dollar_amount_string.split(".")
d.to_i * 100 + c.to_i # => 532
答案 2 :(得分:0)
我从original accepted answer开始,但是在此过程中必须进行一些重要的修复:
def dollars_to_cents(string=nil)
# remove all the signs and formatting
nums = string.to_s.strip.delete("$ CAD ,")
# add CENTS if they do not exit
nums = nums + ".00" unless nums.include?(".")
return (100 * nums.strip.to_r).to_i
end
CAD 1,215.92
CAD 1230.00
$11123.23
$123
43234.87
43,234.87