首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >MySql浮点数据类型和超过7位小数位数的问题

MySql浮点数据类型和超过7位小数位数的问题
EN

Stack Overflow用户
提问于 2009-05-22 15:25:05
回答 2查看 19.3K关注 0票数 4

我们在Ubuntu9.04上使用的是MySql 5.0。完整版本为: 5.0.75-0ubuntu10

我创建了一个测试数据库。里面还有一张测试台。我看到以下insert语句的输出:

代码语言:javascript
复制
mysql> CREATE TABLE test (floaty FLOAT(8,2)) engine=InnoDb;
Query OK, 0 rows affected (0.02 sec)

mysql> insert into test value(858147.11);
Query OK, 1 row affected (0.01 sec)

mysql> SELECT * FROM test;
+-----------+
| floaty    |
+-----------+
| 858147.12 | 
+-----------+
1 row in set (0.00 sec)

mySql...or中的小数位数/精度设置似乎有问题,我是否遗漏了什么?

更新:

找到了我们要插入的一个数字的边界,代码如下:

代码语言:javascript
复制
mysql> CREATE TABLE test (floaty FLOAT(8,2)) engine=InnoDb;
Query OK, 0 rows affected (0.03 sec)

mysql> insert into test value(131071.01);
Query OK, 1 row affected (0.01 sec)

mysql> insert into test value(131072.01);
Query OK, 1 row affected (0.00 sec)

mysql> SELECT * FROM test;
+-----------+
| floaty    |
+-----------+
| 131071.01 | 
| 131072.02 | 
+-----------+
2 rows in set (0.00 sec)

mysql> 
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2009-05-22 15:49:08

面对手掌!

浮点数是存储为尾数和指数的32位数字。我不能100%确定MySql将如何划分存储空间,但以Java为例,他们将24位用于有符号尾数,8位用于指数(科学记数法)。这意味着一个浮点数可以有的最大值是+8388608*10^127,最小值是-8388608*10^127。这意味着只有7位有效数字,而我的浮点型定义使用了8位。

我们将把所有这些8,2转换为双精度浮点数。

票数 11
EN

Stack Overflow用户

发布于 2009-05-22 15:38:42

MySQL文档提到"MySQL在存储值时执行舍入“,我怀疑这就是这里的问题所在。我复制了您的问题,但将存储类型更改为双精度:

代码语言:javascript
复制
CREATE TABLE test (val, DOUBLE);

检索到的值与您提供的测试值相匹配。

无论如何,我的建议是使用双精度或小数。我使用以下命令尝试了相同的原始测试:

代码语言:javascript
复制
CREATE TABLE test (val, DECIMAL(8,2));

它检索了我给它的值: 858147.11。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/898454

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档