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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/asp.net-mvc/17.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#_Asp.net Mvc_Savechanges - Fatal编程技术网

C# 保存更改时出现十进制值错误

C# 保存更改时出现十进制值错误,c#,asp.net-mvc,savechanges,C#,Asp.net Mvc,Savechanges,我需要将表单中的值存储到一列中,该列是小数4,0 首先在控制器中,我从表单中获取值,然后将其从字符串转换为十进制,然后乘以100,这样我就可以保留所需的值 //"12.34" --> (12.34)*100 --> 1234 item.DECIMAL_VALUE = decimal.Parse(view.decimal_value) * 100; 我在调试模式下进行了检查:item.DECIMAL_值实际上是一个十进制值,其值如预期的那样为1234 继续编写代码,我需要将值保存到数

我需要将表单中的值存储到一列中,该列是小数4,0

首先在控制器中,我从表单中获取值,然后将其从字符串转换为十进制,然后乘以100,这样我就可以保留所需的值

//"12.34" --> (12.34)*100 --> 1234
item.DECIMAL_VALUE = decimal.Parse(view.decimal_value) * 100;
我在调试模式下进行了检查:item.DECIMAL_值实际上是一个十进制值,其值如预期的那样为1234

继续编写代码,我需要将值保存到数据库中

_context.TABLE.Add(item);
return _context.SaveChanges();
这就是问题所在。我得到一个DbUpdateException,因为它试图保存1234,00,它与小数4,0(而不是1234)不对应

关于它为什么要这样做以及如何解决问题,有什么想法吗?

如果你想坚持小数点4,0,它实际上是一个整数,你还应该在item类中将变量DECIMAL_值的类型更改为一个真正的整数

之后,为了避免潜在的重新键入问题,您还应该在分配值时使用显式重新键入

item.DECIMAL_VALUE = (int)(decimal.Parse(view.decimal_value) * 100);

你到底为什么要用4,0?这是一个简单的整数。我无法更改数据库中的任何内容,因此即使我不喜欢它,我也必须使用4,0:更改十进制值的类型只会使我出现更多错误,因此我尝试保持它的原样,并按照您对item.DECIMAL\u VALUE=intdecimal.Parseview.DECIMAL\u VALUE*100的建议设置其值;现在它工作了!谢谢:我唯一不明白的是为什么要加两个零?我还有其他类似的十进制数,但我从来没有遇到过这个问题。我不知道它是如何工作的,但有人可能会猜测它调用了变量上的.ToString函数,如果是十进制类型,则会导致使用两个十进制数进行格式化。你不得不使用int的原因很简单,顺便说一句。虽然c有某种隐式的重新键入,但它只在不会丢失数据的情况下起作用,例如int到decimal。但是,在这种情况下,数据可能会丢失十进制信息,因此您必须指定确实要这样做,并将十进制值赋给int。