我有以下代码
int varOut;
int.TryParse(txt1.Text, out varOut); // Here txt1.Text = 4286656181793660
Run Code Online (Sandbox Code Playgroud)
这里txt1.Text是JavaScript生成的随机16位数字,是一个整数.但是上面的代码总是返回false,即varOut值总是为零.
我在这做错了什么?
Ian*_*Ian 17
用于限制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
Run Code Online (Sandbox Code Playgroud)
它应该足够您的号码,只有4.2e15(4,286,656,181,793,660).
或者,decimal.TryParse如果您想要包含十进制数(包含分数,更高精度),您可能需要考虑使用.
decimal varOut;
decimal.TryParse(txt1.Text, out varOut); // Here txt1.Text = 4286656181793660
Run Code Online (Sandbox Code Playgroud)
它是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
Run Code Online (Sandbox Code Playgroud)
在这种情况下,您的数字由16位数组成,位于double精度的边界线上.因此,在某些情况下,您可能会得到错误的结果.只有当您确定您的号码最多只能达到 15位数时才能安全使用它.
*-9,223,372,036,854,775,808到9,223,372,036,854,775,807.
| 归档时间: |
|
| 查看次数: |
2170 次 |
| 最近记录: |