int varOut;
int.TryParse(txt1.Text, out varOut); // Here txt1.Text = 4286656181793660
这里的txt1.Text是由JavaScript生成的一个16位随机整数。但是上述代码总是返回false,即varOut值始终为零。
我在这里做错了什么?
int varOut;
int.TryParse(txt1.Text, out varOut); // Here txt1.Text = 4286656181793660
这里的txt1.Text是由JavaScript生成的一个16位随机整数。但是上述代码总是返回false,即varOut值始终为零。
我在这里做错了什么?
int
(32位
整数)的限制是-2,147,483,648
到2,147,483,647
。您的数字太大了。
对于像您这样的大型integer
数字,请尝试使用long.TryParse
(或Int64.TryParse
,因为在C#中Int64
是long
)进行Parse
操作。 long
数字的限制范围为-9.2e18至9.2e18
*。
long varOut;
long.TryParse(txt1.Text, out varOut); // Here txt1.Text = 4286656181793660
对于您的数字来说,这应该是足够的,因为它只有约4.2e15(4,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
double
精度的边缘。因此,在某些情况下,您可能会得到错误的结果。只有当您确定您的数字精度最多为15位时,您才可以安全地使用它。-9,223,372,036,854,775,808
至9,223,372,036,854,775,807
。int
是指 int32
的简写; 它是一个32位的(有符号)整数,意味着它不能保存大于约20亿的数字。你的数字比这个还大,因此不是一个有效的 int
值。
使用MaxLength
属性来限制数字的位数,用户无法输入超过int32
。
TextBox.MaxLength=9
看起来你可能正在使用超出类型容量的值...请查看https://msdn.microsoft.com/zh-cn/library/system.int32.maxvalue%28v=vs.110%29.aspx
将其存储为long而不是int。 https://msdn.microsoft.com/zh-cn/library/ctetwysk.aspx
long
而不是int
。你的数字太大了,int
无法处理。使用 long.TryParse()
您的数字过大,无法转换为 int。
或者您可以使用 int64.tryparse