如何在数据库中存储精确的十进制值

Posted

技术标签:

【中文标题】如何在数据库中存储精确的十进制值【英文标题】:How can store exact decimal value in database 【发布时间】:2017-05-21 03:26:14 【问题描述】:

1 * 20/100 = 0.2

我想在数据库中存储相同的值我该怎么做 我将列类型设为Decimal,长度自动设为(10,0)

我的问题是它存储为 0 而不是 0.2

【问题讨论】:

double 或 float 是你在 mysql 中的朋友 .... 您可以将表格字段从int更改为float 您必须将表格文件类型更改为 float 或 varchar 它与浮动一起使用 我怀疑使用浮点数是个好主意 - 在您决定之前,您绝对应该阅读数据类型。 【参考方案1】:

没有数据类型会准确存储1/3

您的20/100 示例意味着需要DECIMAL(..., 2),其中... 是合适的最大位数包括2

如果没有进一步了解这些数字的来源或使用方式,我们无法进一步讨论。

【讨论】:

【参考方案2】:

在您的数据库中使用类型“double”(10,2)。

double 是类型,长度是 10,2 它将存储 0.20

如果您只想存储一个十进制数字,请使用 10,1

谢谢。

【讨论】:

FLOATDOUBLE 不精确并且涉及额外的舍入。不要与他们一起使用(m,n)【参考方案3】:

将该字段的限制更改为 (10,2),然后重试。它可能会对你有所帮助。

【讨论】:

以上是关于如何在数据库中存储精确的十进制值的主要内容,如果未能解决你的问题,请参考以下文章

如何在 SQL Server 中存储十进制值?

用一张表来存储数据状态,并且可以进行多状态精确查询;使用二进制来表示数据状态,并且是可以无顺序的状态;解决使用中间表来存储数据的多状态;数据状态还可以这么玩;

Swift:正确解码不精确的十进制

浮点数的十六进制表示

用 GMP 解析十进制值?

JDBC SQL Server十进制“发明”精度