Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/powerbi/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在Ruby中传递带小数点的变量_Ruby - Fatal编程技术网

如何在Ruby中传递带小数点的变量

如何在Ruby中传递带小数点的变量,ruby,Ruby,我在这方面遇到了真正的困难,我看到的每一个答案似乎都不起作用。我已经能够将1.44这样的值传递为1.00,但两个十进制值正在丢失。我从一个api传递了许多值,然后我想通过调用将这些值提交给一个api。代码如下: IncomeWagesWeekly = params[:WagesWeekly].to_i 我如何确保当通过此项时,小数点后两位是存在的。谢谢您的帮助。也许不要尝试使用整数,而是使用来\u f。也可以考虑任何 SCAFTF(“%0.02f”,Youl编号)< />代码,但它返回字符串。

我在这方面遇到了真正的困难,我看到的每一个答案似乎都不起作用。我已经能够将1.44这样的值传递为1.00,但两个十进制值正在丢失。我从一个api传递了许多值,然后我想通过调用将这些值提交给一个api。代码如下:

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看起来都不像整数。请你澄清一下你的要求好吗?