Int.TryParse() returns 始终为假

Int.TryParse() returns false always

我有以下代码

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

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

我这里做错了什么?

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

对于像你这样的大 integer 数字,尝试 Parse 使用 long.TryParse(或 Int64.TryParse 因为 Int64long在 C# 中)代替。 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 数字(包含小数,精度更高),您可能需要考虑使用 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位左右(reference)。

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 只是 shorthand 对于 int32;它是一个 32 位(带符号)整数,这意味着它不能容纳大于 20 亿左右的数字。您的数字大于该数字,因此不是有效的 int 值。

看起来您使用的值可能超出了您正在使用的类型的容量...查看 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()

您的数字太大,无法转换为整数。

或者您可以使用 int64.tryparse

使用MaxLength 属性限制位数,用户不能输入超过int32

TextBox.MaxLength=9