Int.TryParse()始终返回false

我有以下代码

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

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

我在这做错了什么?

int32-bit整数)的限制是-2,147,483,6482,147,483,647 。 你的号码太大了。

对于大integer (如您的情况),请尝试使用long.TryParse (或Int64.TryParse因为Int64在C#中很long )来Parselong数限制范围为-9.2e18 to 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-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,8089,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