存储 C# 十进制值需要什么 MySQL“DECIMAL”精度和小数位数?

What MySQL "DECIMAL" precision and scale is required to store a C# decimal value?

提问人:Rev 提问时间:9/14/2018 更新时间:9/15/2018 访问量:913

问:

我想在我的MySQL数据库中存储一些十进制值。我猜显而易见的MySQL数据库类型是DECIMAL

我必须为 DECIMAL(a,b) 设置什么精度“a”和小数位数“b”,才能表示/存储 C# 十进制值类型的完整范围?

在 DECIMAL 列声明中,可以(并且通常)指定精度和小数位数;例如:

salary DECIMAL(5,2)

在此示例中,5 是精度,2 是小数位数。精度表示为值存储的有效位数,小数位数表示小数点后可以存储的位数。

据我了解,十进制最多可以有 29 位有效数字。小数点的位置取决于实际值,还是我在这里犯了错误?这意味着我最坏的情况是小数点分隔符之前有 29 位数字,或者小数点后有 29 位数字。

所以我假设,我至少必须使用像 DECIMAL(58,29) 这样的东西来处理数据库中的两种情况?

C# MySQL .NET 浮点 精度

评论

0赞 TaW 9/14/2018
好电话。根据文档,确实需要 DECIMAL(58,29) 才能安全起见。Otoh,您可能对问题域有所了解,并且可以相应地限制小数位数。
0赞 Raymond Nijland 9/14/2018
“打得好。根据文档,为了安全起见,确实需要 DECIMAL(58,29)。 @TaW分享文档链接?
0赞 TaW 9/14/2018
他们在 OP 中。
0赞 Raymond Nijland 9/14/2018
@TaW我没有在那里阅读带有“安全十进制(58,29)”数字的 annything..我发现的最好的是。“MySQL 以 65 位十进制数字的精度执行操作,这应该可以解决最常见的不准确问题。”dev.mysql.com/doc/refman/8.0/en/problems-with-float.html
0赞 TaW 9/14/2018
哼?那么呢? .Net Decimal 有 28-29 位数字,但没有指定小数点的哪一边。当然,这不仅与操作有关,还与存储有关。

答: 暂无答案