我有以下代码
// 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值总是为零。
我在这里做错了什么?
答案 0 :(得分:16)
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个数字(包含分数,更高的精度),您可能需要考虑使用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位数(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,808
至9,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