Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/ruby/22.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 on rails Rails将具有浮点值的字符串转换为整数_Ruby On Rails_Ruby - Fatal编程技术网

Ruby on rails Rails将具有浮点值的字符串转换为整数

Ruby on rails Rails将具有浮点值的字符串转换为整数,ruby-on-rails,ruby,Ruby On Rails,Ruby,我有一个模型,它有一个名为value的属性,该属性作为整数保存在数据库中 我使用文本字段在视图中输入数字,我还对其执行了一种方法:在保存之前获取值(类似于21.37),并使用货币宝石将其转换为美分 然而,似乎在我能够执行将其从浮点转换为整数的方法之前,它正在被转换为某种整数,而十进制正在丢失 我通过在保存之前运行的方法输出值,并将其四舍五入到21 有人知道为什么会发生这种情况吗,我没有对它执行任何其他更改。我猜您在控制器中执行类似于优惠券的操作。new(params),并且由于Rails知道优惠

我有一个模型,它有一个名为
value
的属性,该属性作为
整数保存在数据库中

我使用
文本字段
在视图中输入数字,我还对其执行了一种方法
:在保存之前
获取值(类似于21.37),并使用
货币
宝石将其转换为美分

然而,似乎在我能够执行将其从浮点转换为整数的方法之前,它正在被转换为某种整数,而十进制正在丢失

我通过在保存之前运行
的方法输出
,并将其四舍五入到
21


有人知道为什么会发生这种情况吗,我没有对它执行任何其他更改。

我猜您在控制器中执行类似于
优惠券的操作。new(params)
,并且由于Rails知道
优惠券的
应该是一个整数,所以它会在
参数[:value]上调用
到I
在封面下为您提供,将21.37变成21。这里有一个相当不雅但有效的解决方案:

params[:value] ~= /.*\.(\d+)/
params[:value] = params[:value].to_f * (10**$1.length) if $1
在执行优惠券。新建(参数)
之前先执行此操作

另一种选择是简单地假设你不关心小数点后第二位之后的任何事情(毕竟你是在处理美分)。然后您可以简单地执行
params[:value]=params[:value].四舍五入(2)*100


<>你也应该考虑使用<代码> NoMyByField代替你的代码> TeXiField,这样你至少可以确定你得到了一个数字。类似于
number\u字段(:优惠券,:值,步骤:0.01)
的内容应该可以确保您的用户可以输入小数。

我同意@kitkat似乎是模型层中会发生的事情。您可能可以在“验证前”或“优惠券”的自定义设置程序中实现到美分逻辑的转换。

在服务器日志中,是
param[:value]
21.37还是21?我想知道舍入是发生在Rails还是Rack中。回顾日志,我看到了2015-12-21 19:09:55+0000由CouponsController处理的127.0.0.1的“/projects/1/coups”开始发布:{“value”=>“12.28”}看起来它是一个字符串,一开始我认为它一定是一个Rails之类的东西。是的,我认为它会是这样的。不幸的是,我永远不知道这个数字是否有2个小数点。我添加了一个解决方案。