我有
price_input = gets.strip.to_i
我正在尝试将其添加到哈希数组中。添加到数组有效,但 .gets.strip.to_i 删除了所有小数。有没有办法在不删除小数的情况下添加它?
为了进一步理解,我有一个现有的哈希数组,其中(价格:[整数]),我稍后将这些整数与代码添加在一起,所以我需要 .to_i 因为我无法添加字符串和整数
整数不是浮点数,而浮点数是处理财务表示的糟糕方法。有一些处理金钱的宝石可以抽象出浮点数学的各种问题,但如果您只是在寻找简单的东西:
require "bigdecimal"
print "Enter a price: "
price_input = BigDecimal(gets)
puts "You entered $#{price_input.to_f.round 2}"
您甚至不必删除或删除您的输入,因为 BigDecimal 会为您处理。但是,请记住,即使 BigDecimal 或 Real 能够正确处理小数美分,但当您转换回精度为 2 的 Float 时,任何涉及一分钱小数的内容都可能导致某种舍入错误,因此您'无论您的内部代表如何,都需要决定如何处理舍入。
您可以使用
to_f
方法。它将 String
对象转换为 Float
对象。你也不需要strip
方法
" 0.2 ".to_f
# => 0.2
或者根据你的情况
price_input = gets.to_f
请记住,当两个整数交互时,结果将始终是整数。如果一个数字是整数,第二个数字是浮点数,则结果将是浮点数
你可以使用下面的方法,这样如果有人输入字符而不是数字,就会出现错误。
price_input = Float(gets)