当我定义一个存储十进制值的表时,我使用如下语句:
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之间存在很大差异。
答案 0 :(得分:1)
如果您不需要进行更高/更低的比较,请存储为VARCHAR(..)
字符串'21'和'21 .00'具有相同的值,但呈现不同的“精度”。
需要数值时,添加零(col + 0
)。
这不允许“负精度”,例如“1.2M”表示为1200000
。如果你需要,那么Norbert的方法可能会更好。
答案 1 :(得分:0)
您可以按照不同的方式存储数据,以高精度和准确的召回方式存储:
创建一个包含两列的表:
CREATE TABLE precise (value BIGINT, decimaldot INT);
使用代码确定点的位置,例如在21
值:2(假设为1索引)。所以存储的值将是:
INSERT INTO precise values (21,2);
检索它将返回21
精确(解析位置2的值21中的点,为21)
价值17.008也将在2:
处得出结果INSERT INTO precise values (17008,2);
等。
使用VARCHAR(4000)
代替biginteger或使用blob字段可以存储更大的值。