Int.TryParse() 总是返回 false

6
我有以下代码。
 int varOut;
 int.TryParse(txt1.Text, out varOut); // Here txt1.Text = 4286656181793660  

这里的txt1.Text是由JavaScript生成的一个16位随机整数。但是上述代码总是返回false,即varOut值始终为零。

我在这里做错了什么?


1
所以你已经阅读了MSDN Int32.TryParse,其中写道“false ...表示一个小于MinValue或大于MaxValue的数字”。你能请澄清一下这个声明中你需要帮助的部分吗? - Alexei Levenkov
6个回答

19

int32位整数)的限制是-2,147,483,6482,147,483,647。您的数字太大了。

对于像您这样的大型integer数字,请尝试使用long.TryParse(或Int64.TryParse,因为在C#中Int64long)进行Parse操作。 long数字的限制范围为-9.2e18至9.2e18*。

long varOut;
long.TryParse(txt1.Text, out varOut); // Here txt1.Text = 4286656181793660  

对于您的数字来说,这应该是足够的,因为它只有约4.2e154,286,656,181,793,660)左右。

或者,如果您想要具有小数和更高精度的十进制数字,可以考虑使用decimal.TryParse

decimal varOut;
decimal.TryParse(txt1.Text, out varOut); // Here txt1.Text = 4286656181793660  

这是一个128位的数据类型,范围为-7.9e28至7.9e28,精度为28-29个有效数字,最适合于涉及货币的任何计算。

最后,补充一下完整的答案,使用double可能是不安全的 - 不要使用它。虽然double的范围非常大(±5.0 × 10e−324至±1.7 × 10e308),但其精度仅约为15-16位数字(参考资料)。

double varOut;
double.TryParse(txt1.Text, out varOut); // Not a good idea... since the input number is 16-digit Here txt1.Text = 4286656181793660  

在这种情况下,您的数字由16位数字组成,处于double精度的边缘。因此,在某些情况下,您可能会得到错误的结果。只有当您确定您的数字精度最多为15位时,您才可以安全地使用它。

*-9,223,372,036,854,775,8089,223,372,036,854,775,807

基本上,我只需要Int32值,因为我将在一个仅接受32位整数值的函数中使用它。也许我需要生成不大于2,147,483,647的随机数。 - Microsoft DN

3

int 是指 int32 的简写; 它是一个32位的(有符号)整数,意味着它不能保存大于约20亿的数字。你的数字比这个还大,因此不是一个有效的 int 值。


3

使用MaxLength属性来限制数字的位数,用户无法输入超过int32

TextBox.MaxLength=9  

1

1
你应该使用long而不是int。你的数字太大了,int无法处理。

1

使用 long.TryParse()

您的数字过大,无法转换为 int。

或者您可以使用 int64.tryparse


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接