gpt4 book ai didi

mysql - 我的十进制数在创建时会缩短,但在编辑时不会

转载 作者:行者123 更新时间:2023-11-29 00:24:32 25 4
gpt4 key购买 nike

我正在使用 gmaps4rails 并且为了存储来自用户标记的精确坐标,我使用字符串数据类型 来表示纬度和经度。

然而,即使我在页面上的纬度/经度字段填满了整个数字(即 37.7956059460017130.794677734375),当我检查日志时,这些是插入的数字:37.81813830.7336038。它们以某种方式近似?!

但是如果我从编辑屏幕编辑该项目,整个值都会毫无问题地存储。我可以在我的日志和数据库中看到这一点。

我还尝试使用小数(16 位精度和 14 位小数位数)而不是字符串。但是,我的数据库仍然只存储一个长数字的近似部分,然后用 0 填充其余部分。例如,如下所示:44.31223760000000

我使用 Ruby 2 和 Rails 4 以及 mysql 作为数据库。但我认为问题出在 activerecord 上,因为它是将值存储在数据库中的那个?

这些来 self 的新/编辑表单:

  <%= f.label :latitude %>
<%= f.text_field :latitude %>

<%= f.label :longitude %>
<%= f.text_field :longitude %>

任何想法将不胜感激。谢谢!

最佳答案

我猜发生了一些隐藏的转化。

以下是您可以检查的一些事项:

(1) 每当您将数字打印到控制台时,to_s 都会生成输出,至少对于 float 而言,它会将值四舍五入。 (只是返回的输出,不是原来的值)

例如 (1.0/10).to_s 返回 "0.1"%.20f"% (1.0/10) 返回 "0.10000000000000000555" 如果您试图找出您的问题,我建议您首先创建一个帮助程序来打印出没有任何截断的十进制数字,或者找到另一种方式来显示您的值而不必质疑是否数字是否四舍五入。

(2) 如果您使用字符串,ActiveRecord 没有理由截断您的输入。这将是许多应用程序都会遭受的可怕错误。更有可能发生另一种转换,可能类似于 value.to_f.to_s 或类似的东西。您可以通过仅插入字符来对此进行测试。如果您的值最终在数据库中为零或零,那么您肯定有隐藏的转换。

(3) 如果您使用小数,即 BigDecimal,请确保您仅使用 BigDecimal 而没有使用 Float!显式或使用 to_f。这样你也会引入舍入问题

(4) 您的数据也可能无法完整地到达您的应用程序,这可能是因为 Javascript 或 HTML5 输入 (type=number) 可能会降低精度。您可以通过在 Controller 操作中打印出整个 params 散列来验证这一点。 (使用 pp 或更好的 ap )

(5) 检查您的迁移。确保使用正确的精度并将给定的精度应用于数据库。

关于mysql - 我的十进制数在创建时会缩短,但在编辑时不会,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19559799/

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