如何在Ruby中传递带小数点的变量
我在这方面遇到了真正的困难,我看到的每一个答案似乎都不起作用。我已经能够将1.44这样的值传递为1.00,但两个十进制值正在丢失。我从一个api传递了许多值,然后我想通过调用将这些值提交给一个api。代码如下:如何在Ruby中传递带小数点的变量,ruby,Ruby,我在这方面遇到了真正的困难,我看到的每一个答案似乎都不起作用。我已经能够将1.44这样的值传递为1.00,但两个十进制值正在丢失。我从一个api传递了许多值,然后我想通过调用将这些值提交给一个api。代码如下: IncomeWagesWeekly = params[:WagesWeekly].to_i 我如何确保当通过此项时,小数点后两位是存在的。谢谢您的帮助。也许不要尝试使用整数,而是使用来\u f。也可以考虑任何 SCAFTF(“%0.02f”,Youl编号)< />代码,但它返回字符串。
IncomeWagesWeekly = params[:WagesWeekly].to_i
我如何确保当通过此项时,小数点后两位是存在的。谢谢您的帮助。也许不要尝试使用整数,而是使用
来\u f
。也可以考虑任何<代码> SCAFTF(“%0.02f”,Youl编号)< />代码,但它返回字符串。 < P>首先,看来您想在这里做定点算术。因此,使用浮点数不是正确的选择,因为浮点数计算可能产生数学上不正确的结果
解决这个问题的一个办法是要么坚持使用整数(正如已经建议的那样),要么使用Ruby标准库中定义的数据类型,特别是它的方法fix
、frac
和to_digits
现在谈谈您的数据库:您没有说您正在使用哪个数据库,以及如何将值传递给它,但一般来说,将非整数值存储到应该接受整数的数据库字段中是个坏主意。正如你所观察到的,分数部分被删除了。正确的行为
您可以重新定义数据库模式,也可以自己将十进制值转换为与数据库中的字段定义匹配的值。走哪条路,取决于您希望以后实际使用该值做什么。例如,如果您只想显示它,而不想执行任何计算,则可以使用字符串。或者,如果您知道小数位数没有超过某个限制,您可以为数据库列定义合适的数字格式,等等。您在Ruby语言中没有小数点后的固定数字之类的东西
1
与1.00
相同,正如之前在评论中正确提到的那样(几乎相同)
如果您不检查它的类型:
1.is_a? Integer # => true
1.is_a? Float # => false
都一样
只需使用1.44即可
如果出于某种原因,您希望有一个Float
的实例,请使用to_f
方法。要明确裁剪编号,应使用圆形
,或天花板
,或地板
方法:
1.44.round.to_f # => 1.0
1.55.round.to_f # => 2.0
1.44.ceil.to_f # => 2.0
1.55.ceil.to_f # => 2.0
1.44.floor.to_f # => 1.0
1.55.floor.to_f # => 1.0
那么,您想要
1.44
还是1.00
?仅供参考,数学方面,1.00
与1.0
相同,基本上与1
相同。1.55会发生什么?它应该变成2.00吗?我刚刚试用了sprintf,它似乎还可以,奇怪的是,如果它是一个字符串,API和数据库应该只接受这些字段的整数,但似乎没有问题。谢谢您的帮助。@user3385136“API和数据库只能接受整数”-1.44和1.00看起来都不像整数。请你澄清一下你的要求好吗?