mySQL 列没有 DECIMAL 的一刀切精度



当我定义一个表来存储十进制值时,我使用如下语句:

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">

和"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 字段来存储较大的值。

最新更新