使用十进制数据类型时的价格变化

Posted

技术标签:

【中文标题】使用十进制数据类型时的价格变化【英文标题】:Price changes when using decimal data type 【发布时间】:2012-12-05 10:16:49 【问题描述】:

我有一个数据类型为decimal 的列设置为这样..

`cost` decimal(4,2) NOT NULL DEFAULT '0.00',

但是,当我输入价格时,例如 100.00,下次我查看它时会显示 99.99

这是为什么?我以为4,2 允许小数点前 4 个字符和小数点后 2 个字符?

【问题讨论】:

【参考方案1】:

4 是精度(总位数),2 是小数位数(小数位)。

在您的情况下,您需要 6,2。

【讨论】:

【参考方案2】:

DECIMAL(M,D) 列最多允许小数点左侧有 M - D 个数字。

M 是最大位数(精度)。

【讨论】:

【参考方案3】:

十进制 [ (p[ ,s] )] 和数字[ (p[ ,s] )] 固定精度和比例数字。当使用最大精度时,有效值从 - 10^38 +1 到 10^38 - 1。十进制的 ISO 同义词是 dec 和 dec(p, s)。 numeric 在功能上等同于 decimal。

底线: 您应该尝试将其设为 6,2。

6为共6位,2为点后2位。

【讨论】:

以上是关于使用十进制数据类型时的价格变化的主要内容,如果未能解决你的问题,请参考以下文章

VBA:为从 SQL Server 数据库中选择的十进制数获取逗号分隔符而不是点

有大量节点或二进制数据时的 Erlang 消息

用逗号代替点的十进制数(php 和 sql)

十进制数据类型正在四舍五入值

JavaScript数据类型

整数进制转换机制