Ruby:将美元(字符串)转换为美分(整数)

Ruby: Convert dollar (String) to cents (Integer)

如何将带有美元金额的字符串(例如 "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.

的输入

我也试过钱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