Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/257.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 小数超出范围异常_C#_.net_Sql Server_Decimal - Fatal编程技术网

C# 小数超出范围异常

C# 小数超出范围异常,c#,.net,sql-server,decimal,C#,.net,Sql Server,Decimal,在我的C#应用程序中,我试图将十进制价格保存到SQL Server表中。列类型为decimal,未定义总位数 没有折扣计算,一切正常 但是当我运行一些计算时,我得到了一个最终值21800,当我试图保存它时,我得到了以下错误 "Parameter value '218000/00000000000000' is out of range." 我不明白额外的零是从哪里来的!我只知道使用myValue.ToString()我也会得到218000/00000000000000 我知道浮点后的数字是由计

在我的C#应用程序中,我试图将十进制价格保存到SQL Server表中。列类型为
decimal
,未定义总位数

没有折扣计算,一切正常

但是当我运行一些计算时,我得到了一个最终值
21800
,当我试图保存它时,我得到了以下错误

"Parameter value '218000/00000000000000' is out of range."
我不明白额外的零是从哪里来的!我只知道使用
myValue.ToString()
我也会得到
218000/00000000000000

我知道浮点后的数字是由计算引起的。但无论他们做什么,我的价值观是观看时的
21800
。为什么它试图保存
218000/00000000000000
?为什么它关心零呢


知道为什么会发生这种情况以及如何解决吗?

我必须在SQL表中指定十进制列的总位数(我将其设置为
十进制(19,4)

此外,我的C#表示字段还需要有正确的精度计数


我仍然不知道额外的零以及SQL为什么关心它们。欢迎提供任何解释。

存储十进制数字有两种方法:

  • 固定点:这是您在SQL Server项目中定义的。您定义了
    十进制(19,4)
    ,表示总共19位,小数点后4位。如果定义此类类型,则每个数字始终在小数点后有4位数字;此外,您不能存储小数点后超过4位的数字注意,在C#中没有等价于不动点的东西

  • 浮点:这些是C#中的类型
    浮点
    双精度
    十进制
    ,以及SQL Server中的类型
    浮点(n)
    。在浮点运算中,正如名字所说,基本上可以改变小数点前后的位数。(从技术上讲,你有固定数量的数字,即所谓的尾数,然后你可以用第二个数字,即指数来移动小数点)


现在转到您的项目:在数据库中,您使用的是定点,而在C#中,您使用的是浮点。因此,当您在C#中计算某些内容,并希望将其存储到数据库中时,它总是从浮点转换为定点。但是,如果C#中的数字与数据库中的十进制数字不匹配,则会出现超出范围的错误。

能否提供代码示例?在数据库中,必须定义十进制精度。查找表中定义的内容。我的猜测是它类似于
decimal(18,14)
@lonic我恐怕不是,那些折扣计算是由整个其他类完成的,但重要的是最终值是一个十进制。@juergen我将我的DB列数据类型更改为
decimal(19,4)
,但仍然得到相同的错误。我想我也必须改变我的
.edmx
@juergend它成功了:)谢谢!但我的SQL列类型首先是
Decimal
,而不是
Decimal(19,4)
。我想那不是固定点吧@没有参数的Yalda
decimal
默认为
decimal(18,0)