当我定义一个表来存储十进制值时,我使用如下语句:
CREATE TABLE myTable (
myKey INT NOT NULL,
myValue DECIMAL(10,2) NOT NULL,
PRIMARY KEY (myKey)
);
但是,这会导致每个 myValue 都以 (10,2( 的通用精度进行存储。 例如
45.6 becomes 45.60
21 becomes 21.00
17.008 becomes 17.01
但是,如果每条记录都有不同精度的 myValue 怎么办? 我需要 45.6 保持 45.6,21 保持 21,17.008 保持 17.008。 否则,测量精度就会丢失。21 和 21.00 之间有很大的区别。
如果您不需要做大于/小于比较,请存储为VARCHAR(..)
和"21.00"将具有相同的值,但呈现不同的"精度"。
需要数值时,添加零 (col + 0
(。
这不允许"负精度",例如"1.2M"表示为1200000
。 如果你需要它,那么诺伯特的方法可能更好。
您可以通过遵循不同的数据存储方式来高精度和精确调用进行存储:
创建一个包含两列的表:
CREATE TABLE precise (value BIGINT, decimaldot INT);
使用代码确定点的位置,例如在21
值中:2(假设索引为 1(。因此存储的值将是:
INSERT INTO precise values (21,2);
检索到它将返回21
精确(解析位置 21 处的值 21 中的点为 21,即 21(
值 17.008 的十进制点也为 2:
INSERT INTO precise values (17008,2);
等。。
可以使用VARCHAR(4000)
而不是大整数或使用 Blob 字段来存储较大的值。