Int.TryParse()始终返回false

时间:2015-12-18 06:42:17

标签: c# tryparse int32

我有以下代码

// Update the assets the PHCachingImageManager is caching.
    [self.imageManager startCachingImagesForAssets:assetsToStartCaching
                                        targetSize:AssetGridThumbnailSize
                                       contentMode:PHImageContentModeAspectFill
                                           options:nil];
    [self.imageManager stopCachingImagesForAssets:assetsToStopCaching
                                       targetSize:AssetGridThumbnailSize
                                      contentMode:PHImageContentModeAspectFill
                                          options:nil];

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

我在这里做错了什么?

6 个答案:

答案 0 :(得分:16)

int32-bit整数)的限制为-2,147,483,6482,147,483,647。你的号码太大了。

对于大型integer号码,请尝试Parse使用long.TryParse(或Int64.TryParse,因为Int64long在C#中)而不是。 long号码的限制范围为-9.2e18 to 9.2e18 *

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

这个数字就足够了,只有4.2e154,286,656,181,793,660)。

或者,如果您想要decimal个数字(包含分数,更高的精度),您可能需要考虑使用decimal.TryParse

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

128-bit数据类型,范围为-7.9e28 to 7.9e2828-29有效数字精度,最适合任何涉及金钱的计算。

并且,作为完成答案的最后一句话,使用double可能不安全 - 执行而不是使用它。虽然double具有非常高的±5.0 × 10e−324 to ±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

答案 1 :(得分:3)

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

答案 2 :(得分:3)

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

TextBox.MaxLength=9  

答案 3 :(得分:1)

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

将其存储为long而不是int。 https://msdn.microsoft.com/en-us/library/ctetwysk.aspx

答案 4 :(得分:1)

您应该使用long代替int。您的号码对于int

来说太大了

答案 5 :(得分:1)

使用long.TryParse()

您的号码太大而无法转换为整数。

或者您可以使用int64.tryparse