gpt4 book ai didi

c# - 使用 Fluent NHibernate 和 SQL Server 2008 RC2 的 ASP.NET 4 MVC 十进制溢出

转载 作者:太空宇宙 更新时间:2023-11-03 10:56:00 25 4
gpt4 key购买 nike

以下问题是在 ASP.NET MVC 4 中连接到 SQL Server 2008 的 Web API 应用程序上运行的Fluent 的 R2 NHibernate .

所以我有这个表格可以存储一个十进制 数字,该数字可以保存 15 个整数和 14 个小数位的值。数据库列定义为 decimal(29,14) 因此映射属性 Map((x) => x.Factor).Column("FACTOR").Precision(29) .Scale(14).Not.Nullable().

该字段的数据应包含此掩码 999999999999999.99999999999999 中的任何值,但事实并非如此。该数字导致 OverflowException。我相信这是因为数量限制,如引用文献所述:C#SQL Server .

我真的不明白这个符号,-7.9x1028 到 7.9x1028(来自 C# 引用)或 -10^38 +1 到 10^38 -1(来自 SQL Server 引用),但我认为限制数字的是 SQL Server 小数,因为错误发生在事务提交操作上。 ViewModel 显示正确的数字。

为了接受应用程序值,我需要在表列上设置什么精度/比例?

最佳答案

I really don't understand this notation, -7.9x1028 to 7.9x1028 (from the C# reference)

我更喜欢 Decimal Structure中的解释(MSDN)。

The binary representation of a Decimal value consists of a 1-bit sign, a 96-bit integer number, and a scaling factor used to divide the 96-bit integer and specify what portion of it is a decimal fraction. The scaling factor is implicitly the number 10, raised to an exponent ranging from 0 to 28. Therefore, the binary representation of a Decimal value the form, ((-296 to 296) / 10(0 to 28)), where -(296-1) is equal to MinValue, and 296-1 is equal to MaxValue.

你的小数应该写成 9(重复 29 次)/1014

问题是大于 9x1028 的 9(重复 29 次)太大而无法转换为 96 位整数表示(最大值为 7.9x1028 您的第一个定义,您将在上面链接的备注中检索)

事实上,如果你试着写

十进制 d = 99999999999999999999999999999m;

您将收到一条错误消息,指出“常数值计算溢出”。

我想要记住的是:您最多可以有 29 位有效数字,只要这些有效数字不构成大于 7.9x1028

的整数

写的时候好像没有报错

decimal d = 999999999999999.99999999999999m ;

但会发生一些舍入。使用 SQLite 对您的问题运行一些测试数据库,碰巧作为参数传递的数字是 1000000000000000.0000000000000,它是 (29,13) 并且不能转换为 (29,14)。

尝试在 (29,14) 列中插入 1000000000000000.0000000000000 会导致“将数字转换为数字数据类型时出现算术溢出错误。”

关于c# - 使用 Fluent NHibernate 和 SQL Server 2008 RC2 的 ASP.NET 4 MVC 十进制溢出,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19503501/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com