【问题标题】:phpMyAdmin Float Disable Round NumberphpMyAdmin Float 禁用整数
【发布时间】:2017-06-18 08:38:52
【问题描述】:

我一直在从事一个在数据库表中插入大量数字的项目。现在我完成了代码,我正在检查错误值,我注意到我的值 3075277 在插入数据库时​​会转换为 3075280,而 3075255 将是 3075260。

列类型是浮点数。我应该更改什么来禁用舍入?这个连小数都没有,为什么要这样四舍五入?我使用默认选项,仅将排序规则更改为 utf8_general_ci 并将类型更改为 varchar 和 lenght 在某些情况下和在其他情况下浮动。

【问题讨论】:

  • 只需将数据类型更改为BIgINT并检查结果
  • 我也需要能够存储带小数的数字,所以我很难浮动将是最好的并且更容易搞砸。
  • 那你可以去Double
  • 好吧,我要试试。但是,如果我可能会问,为什么不浮动,这是正常行为吗?
  • 双重解决了。会不会让内存变大变硬?我希望它可以使用大约 250 个列。

标签: php mysql sql sqldatatypes


【解决方案1】:

这个问题出在 MySQL,而不是 Phpmyadmin。

FLOAT 具有 6-7 位有效数字的精度,正如您在错位值中看到的那样。 “有效数字”是指从任何地方开始:

1234567xxxx.
      12345.67xxx
          1.234567xxx
          0.0000001234567xxx

xxx 可能是零或某种“噪音”,而不是您放入列中的原始值。

DOUBLE 提供大约 16 个有效数字。

DECIMAL(9,0) 给你小数点左边 9 位数字,之后没有。有点像INT

DECIMAL(9,4) 在点的左侧为您提供 5 (9-4) 位数字; 4 之后。

您要存储哪些类型的数字?钱?科学测量?天文距离? DT的财富?

【讨论】:

    【解决方案2】:

    现在您正在使用FLOAT 类型但由于您在数据库中保存大十进制数而出错。你应该去DOUBLE

    虽然FLOATDOUBLE是相似的,因为它们以近似值存储值,但是DOUBLE是8字节,FLOAT是4字节。

    FLOAT 用于单精度,而 DOUBLE 用于双精度数字。

    MySQL 对单精度值使用四个字节,对双精度值使用八个字节。

    浮点数和十进制(数字)数有很大区别,您可以将其与 DECIMAL 数据类型一起使用。这用于存储精确的数字数据值,与浮点数不同,在浮点数中保持精确的精度很重要,例如货币数据。

    因此,在您的情况下,对于更大的数字,您需要DOUBLE 而不是FLOAT

    【讨论】:

    • 谢谢,那我就去。我坚持认为这很奇怪,为什么它没有发生在所有数字上,猜想它只是大数字。
    猜你喜欢
    • 2016-12-02
    • 1970-01-01
    • 2013-11-17
    • 2021-06-16
    • 2011-11-21
    • 2023-03-10
    • 2011-03-14
    • 1970-01-01
    相关资源
    最近更新 更多