Ruby:将美元(String)转换为美分(整数)

时间:2016-04-30 05:13:17

标签: ruby currency

如何将包含"5.32""100"等美元金额的字符串转换为美分的整数金额,例如53210000

我有以下解决方案:

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的输入。

我也尝试过金钱宝石,但它无法将字符串作为输入。

3 个答案:

答案 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