ruby如何使用gets.to_i将小数保留在哈希值中

yshpjwxd  于 12个月前  发布在  Ruby
关注(0)|答案(3)|浏览(66)

我有

price_input = gets.strip.to_i

我想把它加到一个哈希数组里添加到数组可以工作,但是. gets.strip.to_i删除了所有小数。有没有一种方法可以在不去掉小数的情况下把它加起来?
为了进一步理解,我有一个现有的哈希数组,其中(price:[一个整数]),我稍后会用代码将这些整数相加,所以我需要.to_i,因为我不能将字符串和整数相加

vsaztqbk

vsaztqbk1#

在BigDeclare中存储输入字符串

整数不是浮点数,浮点数是处理财务表示的糟糕方法。有一些处理金钱的宝石,抽象出浮点数学的各种问题,但如果你只是在寻找一些简单的东西:

require "bigdecimal"

print "Enter a price: "
price_input = BigDecimal(gets)
puts "You entered $#{price_input.to_f.round 2}"

您甚至不必对输入进行处理或剥离,因为BigDecimal会为您处理。但是,请记住,即使BigDecimal或真实的将正确处理小数美分,当您转换回精度为2的Float时,任何涉及一美分的分数的内容都可能导致某种舍入错误,因此您需要决定如何处理舍入,而不管您的内部表示。

参考

  1. Float#floor
    1.浮点数#ceil
  2. Float#round
    1.浮点数#合理化
z9ju0rcb

z9ju0rcb2#

可以使用to_f方法。它将String对象转换为Float对象。你也不需要strip方法

"  0.2  ".to_f
# => 0.2

对你来说

price_input = gets.to_f

请记住,当两个整数相互作用时,结果始终是整数。如果一个数字是整数,第二个是浮点数,则结果将是浮点数

ijxebb2r

ijxebb2r3#

你可以在下面使用,这样如果有人输入字符而不是数字,就会引发错误。

price_input = Float(gets)

相关问题