Gen*_*diy 4 mysql rounding mysql-5.0
我们在Ubuntu 9.04上使用MySql 5.0.完整版是:5.0.75-0ubuntu10
我创建了一个测试数据库.并在其中的测试表.我从insert语句中看到以下输出:
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)
Run Code Online (Sandbox Code Playgroud)
mySql中设置的比例/精度似乎有问题...或者我错过了什么?
更新:
找到我们插入的其中一个数字的边界,这里是代码:
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>
Run Code Online (Sandbox Code Playgroud)
Gen*_*diy 11
面掌!!!!
浮点数是32位数,存储为尾数和指数.我不是100%确定MySql如何分割存储,但以Java为例,他们将24位用于签名的尾数,8位用于指数(科学记数法).这意味着FLOAT可以具有的最大值是+ 8388608*10 ^ 127,最小值是-8388608*10 ^ 127.这意味着只有7位有效数字,而我的FLOAT定义使用8位数.
我们将把所有这些8,2从FLOAT切换到DOUBLE.
归档时间: |
|
查看次数: |
18578 次 |
最近记录: |