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 值总是零。
我这里做错了什么?
int
(32-bit
整数)的限制是 -2,147,483,648
到 2,147,483,647
。你的号码太大了。
对于像你这样的大 integer
数字,尝试 Parse
使用 long.TryParse
(或 Int64.TryParse
因为 Int64
是 long
在 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,808
到 9,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
我有以下代码
int varOut;
int.TryParse(txt1.Text, out varOut); // Here txt1.Text = 4286656181793660
这里txt1.Text是JavaScript生成的随机16位数字,是一个整数。但是上面的代码总是 return false 即 varOut 值总是零。
我这里做错了什么?
int
(32-bit
整数)的限制是 -2,147,483,648
到 2,147,483,647
。你的号码太大了。
对于像你这样的大 integer
数字,尝试 Parse
使用 long.TryParse
(或 Int64.TryParse
因为 Int64
是 long
在 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,808
到 9,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