C# 小数舍入问题

C# 小数舍入问题,c#,.net,winforms,C#,.net,Winforms,我有一个文本框,它被限制为十进制输入,但sql表的列限制为十进制(18,2)。所以错误是人们可以输入超过18位数+小数点后的位数,但如果我仍然输入 Math.Round(decimal,intDigits); 然后小数点前的数字将超过18,并向我发出一个错误。因此,问题是如何使用这种限制对小数进行舍入。小数点(18,2)。如果需要限制小数点之前的位数,舍入对您没有帮助。我将使用正则表达式验证文本框输入,以限制小数点前后的位数。如果需要限制小数点之前的位数,舍入在这里对您没有帮助。我将使用正则

我有一个文本框,它被限制为十进制输入,但sql表的列限制为十进制(18,2)。所以错误是人们可以输入超过18位数+小数点后的位数,但如果我仍然输入

 Math.Round(decimal,intDigits);

然后小数点前的数字将超过18,并向我发出一个错误。因此,问题是如何使用这种限制对小数进行舍入。小数点(18,2)。

如果需要限制小数点之前的位数,舍入对您没有帮助。我将使用正则表达式验证文本框输入,以限制小数点前后的位数。

如果需要限制小数点之前的位数,舍入在这里对您没有帮助。我将使用正则表达式验证文本框输入,以限制小数点前后的位数。

对于SQL
decimal(p,q)
数据类型,p指定总精度(小数位数),q指定小数点右侧的位数。在您的例子中(
decimal(18,2)
),您有18个十进制数字,其中最右边的2个在小数点的右边

您需要在文本框上设置验证约束。你可以

  • 使用正则表达式进行验证。正则表达式
    ^-?\d{1,16}(\.\d{1,2})$
    可以实现这一点。如果您不希望他们能够输入负数,请省略可选减号

  • 您可以根据一个范围进行验证:转换为
    十进制
    ,然后检查它是否在有效的值范围内

对于SQL
十进制(p,q)
数据类型,p指定总精度(小数位数),q指定小数位数(小数点右侧的位数)。在您的例子中(
decimal(18,2)
),您有18个十进制数字,其中最右边的2个在小数点的右边

您需要在文本框上设置验证约束。你可以

  • 使用正则表达式进行验证。正则表达式
    ^-?\d{1,16}(\.\d{1,2})$
    可以实现这一点。如果您不希望他们能够输入负数,请省略可选减号

  • 您可以根据一个范围进行验证:转换为
    十进制
    ,然后检查它是否在有效的值范围内


通过对小数进行舍入,您可以跳入小数舍入问题。 为了避免这种情况,你可以尝试这样做

int myDecimalInt = myDecimal * (10 * intDigits); 
这将为您提供一个具体的整数,其中包含以所需精度截断的点之后的所有数字:
intDigits


或者您可以尝试在UI端处理它:不要让用户插入超出您支持范围的数字。

通过舍入小数,您可以跳入小数舍入问题。 为了避免这种情况,你可以尝试这样做

int myDecimalInt = myDecimal * (10 * intDigits); 
这将为您提供一个具体的整数,其中包含以所需精度截断的点之后的所有数字:
intDigits


或者你可以尝试在UI方面处理它:不要让用户插入更多的数字,你可以支持。

你是否已经考虑使用A?因为他们的要求,他们不想要蒙版的文本框……你是否已经考虑使用A?因为他们的要求,他们不想要屏蔽的文本框…谢谢!谢谢你的帮助,因为它最适合我的问题。谢谢!谢谢你的帮助,因为这最适合我的问题。