我有一个数据库列定义为ComputerGame
。
在UI中,它是一个自由文本,用户可以在其中输入值,无论用户在内部输入值后,它都会在内部乘以1000。
现在,当我尝试将其保存到数据库时,出现错误
将数据类型数字转换为十进制
时出错
如果我输入值amount decimal (19, 9)
,现在在内部它会乘以千
78654323
并在保存时出现此错误。为什么?
我应该在该范围的文本框中放置哪些验证/数据注释?
答案 0 :(得分:1)
假设这是针对SQL Server的(您还没有这么说 - 但它看起来像是这样):
您已在数据库中将amount
列定义为decimal(19,9)
类型。你不之前得到19位数字和小数点后9位数字(这是许多程序员似乎认为这种符号的意思)。
真正的意思是:
因此在小数点之前得到 10位 。
将您输入的78654323
值乘以一千时,最终得到的值78654323000
11位(小数点前),因此您无法安全此值。
您需要增加小数点前的可用位数(通过使用例如decimal(25,9)
给出小数点前的16位数字。)
答案 1 :(得分:0)
你的验证应该是在乘以1000后得到总共19位数。它不应该超过19(十进制之前和之后的总和)数字。它需要一些计算工作。根据结果我们应该提供验证。
对于进入数据库的结果,它将存储为:78654323000.00000000,适用于十进制(20,9)而非十进制(19,9)。所以,十进制之前的1位数不应该在乘法之后。