我有一个仅限于十进制输入的文本框,但是sql表对该列的限制是十进制(18,2)。所以错误是人们能够输入超过18位数+ +十进制后的数字,但如果我仍然这样做
Math.Round(decimal,intDigits);
然后小数点前的数字将超过18并且会向我发送错误。所以问题是如何用这个限制来舍入小数.Decimal(18,2)。
答案 0 :(得分:3)
如果您需要限制小数点前的位数,则舍入对您无法帮助。我会用正则表达式验证文本框输入,以限制小数点前后的位数。
答案 1 :(得分:2)
对于SQL Decimal(p,q)
数据类型, p 指定总精度(小数位数), q 指定 scale (小数点右边的位数)。在你的情况下(decimal(18,2)
),你有18位小数,最右边的2位在小数点的右边。
您需要将验证限制放在文本框中。你可以
使用正则表达式进行验证。正则表达式^-?\d{1,16}(\.\d{1,2})?$
可以解决问题。如果您不希望它们能够输入负数,请省略可选的减号。
您可以针对某个范围进行验证:转换为Decimal
,然后检查它是否在有效的值范围内。
答案 2 :(得分:1)
通过舍入小数,您可以跳转到十进制舍入问题。 为了避免这种情况,您可以尝试这样做。
int myDecimalInt = myDecimal * (10 * intDigits);
这将为您提供具有所需精度的截断点后所有数字的具体整数:intDigits
。
或者您可以尝试在UI端处理它:不要让用户插入更多数字然后您可以支持。