我需要存储数字,比如
21000
1.0002
0.00230235
12323235
0.2349523这是感觉数据,所以保持准确的值是很重要的。THere有很多选择。
我的解决方案是将所有的值乘以100万,并将它们存储为bigint。这有道理吗?
发布于 2016-04-19 18:31:35
这是有道理的,但我建议您只使用decimal数据类型:https://dev.mysql.com/doc/refman/5.7/en/precision-math-decimal-characteristics.html
如果你要乘以百万,如果你收到的数据集比你预期的要多一个小数点,你最终会把这个数字乘以1,000万,所有其他数字乘以10。相反,使用decimal数据类型会使你在小数点的右边得到30个数字。
十进制列的声明语法是十进制(M,D)。MySQL 5.7中参数的值范围如下: M是最大的数字数(精度)。它的范围是1到65。 D是小数点右边的数字数(小数点)。它的范围为0到30,必须不大于M。
和
SQL标准要求数值(M,D)的精度精确到M位。对于十进制(M,D),标准要求的精度至少为M位,但允许更多。在MySQL中,十进制(M,D)和数字(M,D)是相同的,两者的精度都是M位。 有关十进制值的内部格式的完整说明,请参阅MySQL源发行版中的文件字符串/十进制.c。在decimal2bin()函数中解释了这种格式(用一个例子)。
要格式化您的数字,可以进行如下所描述的格式设置:Format number to 2 decimal places
示例
create table test (
price decimal(40,20)
);
-- all the above insertions will succeed cleanly
insert into test values (1.5), (1.66), (1.777), (1.12345678901234567890);
-- notice we have 21 digits after decimal
-- MySQL will insert data with 20 decimal and add a warning regarding data truncation
insert into test values (1.123456789012345678901);数据
select * from test
price
1.50000000000000000000
1.66000000000000000000
1.77700000000000000000
1.12345678901234567890
1.12345678901234567890
select cast(price as decimal(40,2)) from test
price
1.50
1.66
1.78
1.12
1.12https://stackoverflow.com/questions/36726507
复制相似问题