gpt4 book ai didi

MySQL (MariaDB) float 可视化 : why are values rounded to hundreds or thousands?

转载 作者:行者123 更新时间:2023-11-29 07:16:53 25 4
gpt4 key购买 nike

首先:我是 MySql 新手,看起来我在这里遗漏了一些重要的东西。

在 MySQL 数据库中,我的浮点值范围从单位到十亿。我花了几天时间试图理解为什么所有这些都显示不超过 6 个有效数字,而较低有效数字设置为 0:

即:

select `field` from `table`;
(instead of X -> i get Y)
1 -> 1
12 -> 12
123 -> 123
1234 -> 1234
12345 -> 12345
123456 -> 123456
1234567 -> 1234570
12345678 -> 12345700
123456789 -> 123457000

只有通过“技巧”,我才找到可以读取真实值的地方:

select `field`+0.0 from `table`;

我的问题:这种(恕我直言)奇怪行为背后的理由是什么?文档中在哪里描述了它?我发现完全不直观,我看不到正常 select * 的真实值(当然根据 IEEE 规范近似),但我需要技巧......我在这里错过了什么?

最佳答案

  • FLOAT 有 24 位,或 log<sub>10</sub>(2<sup>24</sup>)(超过 7 个)位,其意义在于:12345678.9<sub>10</sub> 作为 FLOAT 存储在 101111000110000101001111<sub>2</sub> 中(即 12345679<sub>10</sub> )。当显示为十进制时,客户端肯定知道从第 8 位数字开始的所有内容都肯定 false precision(因为 FLOAT 只能存储 7 位十进制数字的精度)。因此,它会丢弃其余部分,留下 12345680

  • DOUBLE 有 53 位,或 log<sub>10</sub>(2<sup>53</sup>)(几乎 16 位)数字,其意义在于:12345678.9<sub>10</sub> 作为 DOUBLE 存储在 101111000110000101001110.11100110011001100110011001101<sub>2</sub> 中(即 12345678.90000000037<sub>10</sub> )。当显示为十进制时,客户端肯定知道从第16位开始的所有内容肯定false precision(因为DOUBLE只能存储15位十进制数字的精度)。因此,它会丢弃其余部分,留下 12345678.9000000

添加 +0.0 时,MySQL 首先将 FLOAT 转换为 DOUBLE

关于MySQL (MariaDB) float 可视化 : why are values rounded to hundreds or thousands?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37679274/

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