我有
price_input = gets.strip.to_i
我想把它加到一个哈希数组里添加到数组可以工作,但是. gets.strip.to_i删除了所有小数。有没有一种方法可以在不去掉小数的情况下把它加起来?为了进一步理解,我有一个现有的哈希数组,其中(price:[一个整数]),我稍后会用代码将这些整数相加,所以我需要.to_i,因为我不能将字符串和整数相加
vsaztqbk1#
整数不是浮点数,浮点数是处理财务表示的糟糕方法。有一些处理金钱的宝石,抽象出浮点数学的各种问题,但如果你只是在寻找一些简单的东西:
require "bigdecimal"print "Enter a price: "price_input = BigDecimal(gets)puts "You entered $#{price_input.to_f.round 2}"
require "bigdecimal"
print "Enter a price: "
price_input = BigDecimal(gets)
puts "You entered $#{price_input.to_f.round 2}"
您甚至不必对输入进行处理或剥离,因为BigDecimal会为您处理。但是,请记住,即使BigDecimal或真实的将正确处理小数美分,当您转换回精度为2的Float时,任何涉及一美分的分数的内容都可能导致某种舍入错误,因此您需要决定如何处理舍入,而不管您的内部表示。
z9ju0rcb2#
可以使用to_f方法。它将String对象转换为Float对象。你也不需要strip方法
to_f
String
Float
strip
" 0.2 ".to_f# => 0.2
" 0.2 ".to_f
# => 0.2
对你来说
price_input = gets.to_f
请记住,当两个整数相互作用时,结果始终是整数。如果一个数字是整数,第二个是浮点数,则结果将是浮点数
ijxebb2r3#
你可以在下面使用,这样如果有人输入字符而不是数字,就会引发错误。
price_input = Float(gets)
3条答案
按热度按时间vsaztqbk1#
在BigDeclare中存储输入字符串
整数不是浮点数,浮点数是处理财务表示的糟糕方法。有一些处理金钱的宝石,抽象出浮点数学的各种问题,但如果你只是在寻找一些简单的东西:
您甚至不必对输入进行处理或剥离,因为BigDecimal会为您处理。但是,请记住,即使BigDecimal或真实的将正确处理小数美分,当您转换回精度为2的Float时,任何涉及一美分的分数的内容都可能导致某种舍入错误,因此您需要决定如何处理舍入,而不管您的内部表示。
参考
1.浮点数#ceil
1.浮点数#合理化
z9ju0rcb2#
可以使用
to_f
方法。它将String
对象转换为Float
对象。你也不需要strip
方法对你来说
请记住,当两个整数相互作用时,结果始终是整数。如果一个数字是整数,第二个是浮点数,则结果将是浮点数
ijxebb2r3#
你可以在下面使用,这样如果有人输入字符而不是数字,就会引发错误。