c# - Int.TryParse() 总是返回 false

标签 c# tryparse int32

我有以下代码

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

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

我在这里做错了什么?

最佳答案

int(32 位 整数)的限制是-2,147,483,6482,147,483,647。你的号码太大了。

对于大的 integer 数字,例如您的情况,尝试使用 long.TryParse(或 Int64.TryParseParse 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.9e2828-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,8089,223,372,036,854,775,807

关于c# - Int.TryParse() 总是返回 false,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34349843/

相关文章:

c# - 什么是 MS Team Foundation Server 的最佳免费开源替代品?

c# - 为什么在更新面板中找不到控件

c# - Windows 窗体控件消失了

c# - TSQL 从递归表中获取所有行

c# - Decimal.TryParse 不解析我的十进制值

C# DateTime.TryParseExact 未按预期工作

c# - 用于匹配多种日期格式的正则表达式

c# - 为什么我打印出 'System.Int32[]' 而不是我的数字数组?

.net - Int32和UInt32有什么区别?

javascript - 下面是提取一些十六进制数据、解释它并将其打印到 console.log 的代码。它在 'req' 循环中工作,但在外部不工作。为什么?