ruby 如何使用 gets.to_i

问题描述 投票:0回答:3

我有

price_input = gets.strip.to_i

我正在尝试将其添加到哈希数组中。添加到数组有效,但 .gets.strip.to_i 删除了所有小数。有没有办法在不删除小数的情况下添加它?

为了进一步理解,我有一个现有的哈希数组,其中(价格:[整数]),我稍后将这些整数与代码添加在一起,所以我需要 .to_i 因为我无法添加字符串和整数

arrays ruby integer gets ruby-hash
3个回答
1
投票

将输入字符串存储在 BigDecimal 中

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

require "bigdecimal"

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

您甚至不必删除或删除您的输入,因为 BigDecimal 会为您处理。但是,请记住,即使 BigDecimal 或 Real 能够正确处理小数美分,但当您转换回精度为 2 的 Float 时,任何涉及一分钱小数的内容都可能导致某种舍入错误,因此您'无论您的内部代表如何,都需要决定如何处理舍入。

另请参阅

  1. 浮动#地板
  2. 浮动#ceil
  3. 浮动#圆形
  4. 浮动#合理化

0
投票

您可以使用

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

"  0.2  ".to_f
# => 0.2

或者根据你的情况

price_input = gets.to_f

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


0
投票

你可以使用下面的方法,这样如果有人输入字符而不是数字,就会出现错误。

price_input = Float(gets)
© www.soinside.com 2019 - 2024. All rights reserved.