十进制舍入问题

时间:2011-09-15 20:28:46

标签: c# .net winforms

我有一个仅限于十进制输入的文本框,但是sql表对该列的限制是十进制(18,2)。所以错误是人们能够输入超过18位数+ +十进制后的数字,但如果我仍然这样做

 Math.Round(decimal,intDigits);

然后小数点前的数字将超过18并且会向我发送错误。所以问题是如何用这个限制来舍入小数.Decimal(18,2)。

3 个答案:

答案 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端处理它:不要让用户插入更多数字然后您可以支持。

相关问题