请参阅以下方法 我试图将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"
返回浏览器
端
答案 0 :(得分:0)
问题是你的pySales
是字符串而不是数字:
p '50000' * 2.25
#=> "5000050000"
如果pySales
是一个数字,乘法将有效:
p 50000 * 2.25
#=> 112500.0
你需要:
pySales
转换为数字(假设为整数)示例:
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
代替,那么迟早会遇到问题:)