Ruby:将美元(字符串)转换为美分(整数)
Ruby: Convert dollar (String) to cents (Integer)
如何将带有美元金额的字符串(例如 "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.
的输入
我也试过钱gem,但它无法将字符串作为输入。
d, c = dollar_amount_string.split(".")
d.to_i * 100 + c.to_i # => 532
您可以使用 String#to_r ("to rational") 来避免舍入错误。
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
我从 开始,但必须在此过程中进行一些重要的修复:
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
123.23
3
43234.87
43,234.87
如何将带有美元金额的字符串(例如 "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.
的输入我也试过钱gem,但它无法将字符串作为输入。
d, c = dollar_amount_string.split(".")
d.to_i * 100 + c.to_i # => 532
您可以使用 String#to_r ("to rational") 来避免舍入错误。
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
我从
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
123.23
3
43234.87
43,234.87