我有以下代码
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
Parse
code>,因为 Int64
在 C# 中是 long
)。 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,您可能需要考虑使用 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 位 ( 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
。
关于c# - Int.TryParse() 总是返回 false,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34349843/