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个小数点。我添加了一个解决方案。