Int.TryParse()始终返回false
我有以下代码
int varOut; int.TryParse(txt1.Text, out varOut); // Here txt1.Text = 4286656181793660
这里txt1.Text是JavaScript生成的随机16位数字,是一个整数。 但是上面的代码总是返回false,即varOut值总是为零。
我在这做错了什么?
int
( 32-bit
整数)的限制是-2,147,483,648
到2,147,483,647
。 你的号码太大了。
对于大integer
(如您的情况),请尝试使用long.TryParse
(或Int64.TryParse
因为Int64
在C#中很long
)来Parse
。 long
数限制范围为-9.2e18 to 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-bit
数据类型,范围为-7.9e28 to 7.9e28
,精确数字为28-29
,非常适合涉及金钱的任何计算。
并且,作为完成答案的最后一句话,使用double
可能是不安全的 – 不要使用它。 虽然double
具有±5.0 × 10e−324 to ±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,808
至9,223,372,036,854,775,807
。
int
只是int32
简写; 它是一个32位(带符号)整数,意味着它不能容纳大于20亿的数字。 您的数字大于该数字,因此不是有效的int
值。
使用MaxLength
属性限制位数,用户不能输入多于int32
。
TextBox.MaxLength=9
看起来您可能正在使用超出您所使用类型容量的值…请查看https://msdn.microsoft.com/en-us/library/system.int32.maxvalue%28v= vs.110%29.aspx
将其存储为long而不是int。 https://msdn.microsoft.com/en-us/library/ctetwysk.aspx
你应该使用long
而不是int
。 你的号码对于int
来说太大了
使用long.TryParse()
您的号码太大而无法转换为int。
或者您可以使用int64.tryparse