我有以下代码
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
号码,如您的情况下,尽量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.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
.