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
(32-bit
整数(的限制是-2,147,483,648
到2,147,483,647
。您的数字太大。
对于较大的integer
数字(例如您的情况(,请尝试改用long.TryParse
(或Int64.TryParse
,因为Int64
在 C# 中long
(,Parse
。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
.
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