我有这个程序从双变量中获取所有数字,删除小数点和小数并分别添加每个数字。这是:
static void Main(string[] args)
{
double input = double.Parse(Console.ReadLine());
char[] chrArr = input.ToString().ToCharArray();
input = 0;
foreach (var ch in chrArr)
{
string somestring = Convert.ToString(ch);
int someint = 0;
bool z = int.TryParse(somestring, out someint);
if (z == true)
{
input += (ch - '0');
}
}
问题是例如当我输入“9999999999999999999999999999999 ....”等时,它被表示为1.0E+254
以及我的程序只添加1+0+2+5+4
并完成的内容。有没有有效的方法使这项工作正常?我尝试使用double的字符串instad,但它的工作太慢..
答案 0 :(得分:6)
您不能将"9999999999999999999999999999999..."
存储为双倍 - double
只有15或16位精度。编译器为您提供了可以代表您所要求的最接近的双倍,即1E254
。
我会研究为什么使用string
很慢,或使用BigInteger
答案 1 :(得分:3)
正如其他答案所示,存储的内容不完全是输入的数字,但是可以表示的最接近的双值。
如果您想检查所有数字,请使用F0
作为format string。
char[] chrArr = input.ToString("F0").ToCharArray();
答案 2 :(得分:0)
你可以在Decimal中存储一个更大的数字,因为它是一个128位的数字,而不是一个Double的64位。
但显然仍有限制。