2013-12-11 34 views
0

请参阅下面的方法 我试图将pySales乘以2.25。所以,当pySales = 50000,然后我的预期看跌语句返回:Watir乘以小数

50000个PY销售

112500拉伸值

相反,认沽语句返回:

50000 PY销售

5000050000拉伸值

我应该用什么声明来使pySales乘以* 2.25?

高清updatePreviousYearSales(浏览器,pySales)

要求 “的Watir-webdriver的”

stretchValue = pySales * 2.25 

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

返回浏览器

回答

0

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

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

乘法会工作,如果pySales是一个数字:

p 50000 * 2.25 
#=> 112500.0 

您需要:

  1. 转换pySales了一些(假设整数)
  2. 转换倍增数一个整数(除非你想要十进制)

E xample:

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 
+0

这工作。谢谢,贾斯汀! – user3014173

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代替,那么你将有问题迟早:)