将数据类型numeric转换为decimal时出错

时间:2016-05-24 04:38:19

标签: c# model-view-controller data-annotations

我有一个数据库列定义为ComputerGame

在UI中,它是一个自由文本,用户可以在其中输入值,无论用户在内部输入值后,它都会在内部乘以1000。

现在,当我尝试将其保存到数据库时,出现错误

  

将数据类型数字转换为十进制

时出错

如果我输入值amount decimal (19, 9),现在在内部它会乘以千

78654323

并在保存时出现此错误。为什么?

我应该在该范围的文本框中放置哪些验证/数据注释?

2 个答案:

答案 0 :(得分:1)

假设这是针对SQL Server的(您还没有这么说 - 但它看起来像是这样):

您已在数据库中将amount列定义为decimal(19,9)类型。你之前得到19位数字和小数点后9位数字(这是许多程序员似乎认为这种符号的意思)。

真正的意思是:

  • 您获得的19位数字
  • ,小数点后 9位

因此在小数点之前得到 10位

将您输入的78654323值乘以一千时,最终得到的值78654323000 11位(小数点前),因此您无法安全此值。

您需要增加小数点前的可用位数(通过使用例如decimal(25,9)给出小数点前的16位数字。)

答案 1 :(得分:0)

你的验证应该是在乘以1000后得到总共19位数。它不应该超过19(十进制之前和之后的总和)数字。它需要一些计算工作。根据结果​​我们应该提供验证。

对于进入数据库的结果,它将存储为:78654323000.00000000,适用于十进制(20,9)而非十进制(19,9)。所以,十进制之前的1位数不应该在乘法之后。