我有一个数据库列定义为amount decimal (19, 9)
。将数据类型数字转换为十进制时出错
在UI它是一个免费的文本,其中用户可以输入值,无论用户后在内部它被用1000
现在,当我试图把它保存到数据库乘以进入价值,我得到一个错误
错误转换数据类型的数值为十进制
如果我输入的数值为78654323
,现在在内部它被用千
78654323 * 1000 = 78654323000
并保存我得到这个错误。为什么?
我应该在范围的文本框中添加什么验证/数据注释?
我有一个数据库列定义为amount decimal (19, 9)
。将数据类型数字转换为十进制时出错
在UI它是一个免费的文本,其中用户可以输入值,无论用户后在内部它被用1000
现在,当我试图把它保存到数据库乘以进入价值,我得到一个错误
错误转换数据类型的数值为十进制
如果我输入的数值为78654323
,现在在内部它被用千
78654323 * 1000 = 78654323000
并保存我得到这个错误。为什么?
我应该在范围的文本框中添加什么验证/数据注释?
您的验证应该类似于在乘以1000后获得总共19位数字。它不应该跨越19(小数点后的&之前的总数)数字。它需要一些计算工作。根据结果我们应该提供验证。
对于你的结果,当它到数据库它将被存储为:78654323000.00000000这适用于十进制(20,9)不适用于十进制(19,9)。所以,在小数点之前的1位不应该在乘法之后。
假设这是SQL Server(你有没有这样说 - 但它看起来):
您已经定义了amount
列在数据库decimal(19,9)
类型。你是而不是之前获得19位数字和9位数字后小数点(这是很多程序员似乎认为这个符号意味着什么)。
什么是真正的意思是:
,因此你得到10位数前的小数点。
当除以一千乘以78654323
您输入的值,你最终拥有11位(小数点前)的值78654323000
,这样的话你不能安全这个值。
您需要在小数点前增加可用数字的位数(例如,使用decimal(25,9)
会给出小数点前16位数字)。
因为十进制(19,9)的含义是10位数字位数和9位小数位数字。 78654323000超过9999999999的值。999999999 –
好的。我应该对文本框进行什么验证? – user662285
只能使用范围验证并接受从0到9999999的值。 –