gpt4 book ai didi

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

转载 作者:太空宇宙 更新时间:2023-11-03 16:45:15 25 4
gpt4 key购买 nike

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

我使用 text_field 在 View 中输入数字,我还在其上执行一个方法 :before_save 获取值(类似于 21.37)并使用money gem 将其转换为美分。

但是,似乎在我什至可以执行将它从 float 转换为整数的方法之前,它已被转换为某种整数并且小数点正在丢失。

我已经通过在运行 before_save: 的方法中输出 value 并将其四舍五入到 21

来测试它

有谁知道为什么会发生这种情况,我不会对其进行任何其他更改。

最佳答案

我猜你正在你的 Controller 中做类似 Coupon.new(params) 的事情,因为 Rails 知道 Couponvalue 应该是一个整数,它有助于在幕后为您调用 params[:value] 上的 to_i,将 21.37 变成 21。这是一个相当不优雅但有效的修复:

params[:value] ~= /.*\.(\d+)/
params[:value] = params[:value].to_f * (10**$1.length) if $1

在执行 Coupon.new(params) 之前执行此操作。

另一种选择是简单地假设您不关心小数点后第二位的任何内容(毕竟您要处理的是美分)。然后你可以简单地做 params[:value] = params[:value].to_f.round(2) * 100

您还应该考虑在您的 View 中使用 number_field 而不是 text_field 这样您至少可以确定您得到的是一个数字。像 number_field(:coupon, :value, step: 0.01) 这样的东西应该确保你的用户可以输入小数。

关于ruby-on-rails - Rails 将具有浮点值的字符串转换为整数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34403996/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com