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

如何将美元金额(如"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,但它不能把字符串作为输入。

您可以使用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 
 d, c = dollar_amount_string.split(".") d.to_i * 100 + c.to_i # => 532