gpt4 book ai didi

mysql - Rails 3 - 存储 float 的问题

转载 作者:行者123 更新时间:2023-11-29 14:21:37 27 4
gpt4 key购买 nike

我正在创建一个 3D map ,并且每个点都有 x、y 和 z 值,我从中获取数据的当前数据库具有如下值:

x = -8.851079259998058e16
y = 4.236944396687888e16
z = -4.451352534647966e16

我尝试像这样进行数据库迁移:

class CreateMapPoints < ActiveRecord::Migration
def change
create_table :map_points do |t|
t.float :x
t.float :y
t.float :z
t.timestamps
end
end
end

但是,当我将数据导入到这个新表中并在 rails console 中运行以下命令时,我得到了奇怪的结果:

1.9.2-p290 :002 > MapPoint.first
MapPoint Load (0.6ms) SELECT `map_points`.* FROM `map_points` LIMIT 1
=> #<MapPoint id: 1, x: -88510800000000000.0, y: 42369400000000000.0, z: -44513500000000000.0, created_at: nil, updated_at: nil>

x、y 和 z 缺少第一个数字后面的点。有人可以建议我在这里做错了什么吗?任何帮助将不胜感激。

谢谢

托尼

最佳答案

从您的问题中尚不清楚实际问题是什么。您说这些值“缺少第一个数字之后的点”。但是,显示的值与输入值大致相同。它们只是代表方式不同。点是显示格式的特征,而不是数字的特征。例如,“1/2”、“.5”和“5e-1”是同一值的不同表示。一个有“/”,一个有“.”,一个有“e”这一事实并不会使它们成为不同的数字。

-8.851079259998058e16 与-88510800000000000.0 大致相同。 (末尾的“e16”表示乘以1016。)但是,在第六位有效数字之后有所不同。所以有人质疑这种差异是否真实,是否是一个问题。

我所说的差异是否真实,是指我想知道字符串“-88510800000000000.0”是否完全显示了计算机中的实际值。可能是在格式化输出时,仅显示前六位有效数字。在某些软件中,默认输出格式可能仅显示几个有效数字,并且可以通过对格式设置进行一些修改来显示更多数字。您还可以指定使用指数格式的显示,正如您已显示的输入值一样。这将涉及您正在使用的特定软件,对此我无法提供进一步的建议。

如果值实际上发生了变化,而不仅仅是其显示,那么您可能需要使用更精确的类型,例如 double 二进制浮点类型或扩展精度或任意精度十进制类型。同样,替代类型的可用性涉及您正在使用的特定软件,我无法提供进一步的建议。

关于mysql - Rails 3 - 存储 float 的问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11660323/

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