2016-05-24 116 views
0

我有一个数据库列定义为amount decimal (19, 9)将数据类型数字转换为十进制时出错

在UI它是一个免费的文本,其中用户可以输入值,无论用户后在内部它被用1000

现在,当我试图把它保存到数据库乘以进入价值,我得到一个错误

错误转换数据类型的数值为十进制

如果我输入的数值为78654323,现在在内部它被用千

乘以3210
78654323 * 1000 = 78654323000 

并保存我得到这个错误。为什么?

我应该在范围的文本框中添加什么验证/数据注释?

+0

因为十进制(19,9)的含义是10位数字位数和9位小数位数字。 78654323000超过9999999999的值。999999999 –

+0

好的。我应该对文本框进行什么验证? – user662285

+1

只能使用范围验证并接受从0到9999999的值。 –

回答

0

您的验证应该类似于在乘以1000后获得总共19位数字。它不应该跨越19(小数点后的&之前的总数)数字。它需要一些计算工作。根据结果​​我们应该提供验证。

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

1

假设这是SQL Server(你有没有这样说 - 但它看起来):

您已经定义了amount列在数据库decimal(19,9)类型。你是而不是之前获得19位数字和9位数字后小数点(这是很多程序员似乎认为这个符号意味着什么)。

什么是真正的意思是:

  • 你得到共有19位的是
  • ,有9位小数点后

,因此你得到10位数的小数点。

当除以一千乘以78654323您输入的值,你最终拥有11位(小数点前)的值78654323000,这样的话你不能安全这个值。

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

相关问题