c#使用double时的大数字表示
Posted
技术标签:
【中文标题】c#使用double时的大数字表示【英文标题】:c# big numbers representation when using double 【发布时间】:2013-11-01 13:53:27 【问题描述】:我有这个程序,它从一个双变量中获取所有数字,删除小数点和减号,并分别添加每个数字。这是:
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
并完成。有没有有效的方法可以使这项工作正常进行?我尝试使用双精度字符串 instad,但它工作得太慢了..
【问题讨论】:
您应该知道,double
首先将无法保存该号码。改为寻找BigDecimal
。
***.com/questions/1319191/…
Double to string conversion without scientific notation的可能重复
所以你的基本目标是将所有数字加起来形成一个无限的字符串?
【参考方案1】:
您不能将 "9999999999999999999999999999999..."
存储为双精度 - double
只有 15 或 16 位精度。编译器会为您提供 可以 表示的最接近您所要求的双精度,即 1E254
。
我会研究为什么使用 string
很慢,或者使用 BigInteger
【讨论】:
【参考方案2】:正如其他答案所表明的那样,存储的内容不会完全是输入的数字,而是可以表示的最接近的双精度值。
如果您想检查所有数字,请使用F0
作为format string。
char[] chrArr = input.ToString("F0").ToCharArray();
【讨论】:
【参考方案3】:您可以在 Decimal 中存储更大的数字,因为它是 128 位数字,而 Double 是 64 位。
但显然还是有限制的。
【讨论】:
以上是关于c#使用double时的大数字表示的主要内容,如果未能解决你的问题,请参考以下文章
java的double的大数值时 怎么才能不显示成科学计数法