Watir乘以小数

时间:2013-12-11 22:15:37

标签: ruby decimal

请参阅以下方法 我试图将pySales乘以2.25。所以,当pySales = 50000时,我希望put语句返回:

50000 PY销售

112500拉伸值

相反,put语句返回:

50000 PY销售

5000050000拉伸值

我应该使用什么语句来乘以pySales * 2.25?

def updatePreviousYearSales(browser,pySales)

要求“watir-webdriver”

stretchValue = pySales * 2.25

puts "#{pySales} PY Sales"
puts "#{stretchValue} Stretch Value"

返回浏览器

2 个答案:

答案 0 :(得分:0)

问题是你的pySales是字符串而不是数字:

p '50000' * 2.25
#=> "5000050000"

如果pySales是一个数字,乘法将有效:

p 50000 * 2.25
#=> 112500.0

你需要:

  1. pySales转换为数字(假设为整数)
  2. 将相乘的数字转换为整数(除非您想要小数)
  3. 示例:

    p ('50000'.to_i * 2.25).to_i
    #=> 112500
    

    因此,您的代码应为:

    def updatePreviousYearSales (browser, pySales)
      require "watir-webdriver" # Not sure why you have this here
      stretchValue = (pySales.to_i * 2.25).to_i
      puts "#{pySales} PY Sales"
      puts "#{stretchValue} Stretch Value"
      return browser
    end
    

答案 1 :(得分:0)

即使将输入转换为数字,浮点算术在计算时也会遇到更大的问题。特别是在处理钱时:)它只是不起作用!

解决方案是将数字转换为BigDecimal而不是Float。所以,在你的情况下:

require "bigdecimal"

def updatePreviousYearSales (browser, pySales)
  require "watir-webdriver" # Not sure why you have this here
  stretchValue = BigDecimal.new(pySales) * BigDecimal("2.25")
  puts "#{pySales} PY Sales"
  puts "#{stretchValue.to_s("F")} Stretch Value"
  return browser
end

你可以从这里http://itreallymatters.net/post/386327451/floating-point-arithmetics-in-19-programming-languages了解更多关于基本浮点算术问题的信息(我不建议像我在很久以前写过的那样写一些猴子修补BigDecimal)。

如果您使用Float代替,那么迟早会遇到问题:)