【问题标题】:How do I store a number(120) in database's FLOAT(10,8) column?如何在数据库的 FLOAT(10,8) 列中存储数字(120)?
【发布时间】:2018-12-31 23:43:42
【问题描述】:

我有longitudelatitude 120,-128.67500305。它们以FLOAT(10,8) 的形式保存在数据库中。如何将 longitude=120 发送到 MySQL 数据库?在这里,我使用 Go 作为 API。当我将 longitude = 120 发送到 DB 时,它会显示错误“列 'longitude' 的值超出范围”。有人可以帮我吗?

【问题讨论】:

  • 一个实数值在小数点后永远不会有任何尾随零,所以你想要的是从技术上不可能开始。
  • 不幸的是,这是不可能的。尾随零只能存在于字符串中,不能存在于数字中。
  • console.log(120 === 120.0000000000) // 是的
  • @PawaniSanthara - 你把数字误认为是它的代表。数字 120 就是数字 120,我们可以用几种方式写它:120、120.0、120.00 等。恕我直言,您可能问错了问题。我怀疑正确的问题是“我如何将这个数字存储在这个数据库的FLOAT(10,8) 列中?”标记特定数据库和您用来访问它的特定 API、您在上面的评论中提到的错误消息,并包括给出错误的代码。

标签: mysql


【解决方案1】:

不要使用浮点数据类型来保存精确的数字值

Float 是一种不精确的 (floating) 数学存储机制。在 MySQL 上用于存储特定的十进制值,您应该使用 DECIMAL 数字类型。

我意识到这很令人困惑,因为 float 在 PHP 和其他地方可以表示整数之间的十进制数。

示例:

Latitude DECIMAL(11,8) SIGNED

这将存储一个 11 位的值,小数点后有 8 位。如:

-128.67500305

它永远不会对这个值进行四舍五入,但会默默地切掉任何超过设定长度(11 位)的多余数字

参考资料:

Read here 关于 Decimal 数据类型。

Read here 一个非常相似的问题

Read here MySQL 关于如何存储 Float 数据的建议。

另请参阅 this question/answer,它实际上建议使用 空间数据类型 来存储 Lat/Long 值。

【讨论】:

    【解决方案2】:

    尽管关于地理坐标使用哪些数据类型有其他有用的指导,但具体错误就在您的问题中 - “超出范围值”

    MySQL 中的FLOAT(10, 8) 类型只能存储±100.0 范围内的值。

    【讨论】:

    • MySQL 中的 FLOAT(10, 8) 字段只能存储 +/-99.99999999 范围内的值。 SQLFiddle here
    • @BobJarvis 对,虽然在我的测试中 MySQL 会将 99.99999999 显示为 100.0
    猜你喜欢
    • 2022-10-04
    • 2011-01-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-07-19
    • 1970-01-01
    相关资源
    最近更新 更多