Int.TryParse() 总是返回 false

本文关键字:返回 false TryParse Int | 更新日期: 2023-09-27 18:27:25

我有以下代码

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

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

我在这里做错了什么?

Int.TryParse() 总是返回 false

int(

32-bit整数(的限制是-2,147,483,6482,147,483,647。您的数字太大。

对于较大的integer数字(例如您的情况(,请尝试改用long.TryParse(或Int64.TryParse,因为Int64在 C# 中long(,Parselong号码的限制范围为 -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 .

int只是int32的简写;它是一个32位(有符号(整数,这意味着它不能容纳大于20亿左右的数字。 您的数字大于此值,因此不是有效的int值。

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

TextBox.MaxLength=9  

看起来您可能正在使用的值超出了您正在使用的类型容量...看看 https://msdn.microsoft.com/en-us/library/system.int32.maxvalue%28v=vs.110%29.aspx

将其存储为长整型而不是整数。https://msdn.microsoft.com/en-us/library/ctetwysk.aspx

你应该使用long而不是int。您的数字太大,无法int

使用长整型。TryParse((

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

或者你可以使用 int64.tryparse