我需要存储像
这样的数字21000
1.0002
0.00230235
12323235
0.2349523
这是感觉数据,因此保持准确值非常重要。 这有很多选择。
我的解决方案是将所有值乘以100万,并将它们存储为bigint。那会有意义吗?
答案 0 :(得分:1)
这是有道理的,但我建议你只使用decimal
数据类型:https://dev.mysql.com/doc/refman/5.7/en/precision-math-decimal-characteristics.html
如果您要乘以百万,并且如果您收到的数据集的十进制数比您预期的多一个,那么您最终会将该数字乘以1000万,将所有其他数字乘以10.相反,使用decimal
数据类型将在小数点右侧显示30个数字。
DECIMAL列的声明语法是DECIMAL(M,D)。该 MySQL 5.7中参数的值范围如下:
M是最大位数(精度)。它的范围是1 到65岁。
D是小数点右边的位数( 规模)。它的范围为0到30,且不得大于M.
和
SQL标准要求NUMERIC(M,D)的精度为 正好是M位数。对于DECIMAL(M,D),标准要求精度 至少M位数但允许更多。在MySQL中,DECIMAL(M,D)和 NUMERIC(M,D)是相同的,两者都具有精确的M精度 位数。
有关DECIMAL值内部格式的完整说明,请参阅 MySQL源代码分发中的文件strings / decimal.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.12