尝试转换以下值:
9.40551020088303E + 21
到
9405510200883031584406
我很遗憾但是如何做到这一点? Math.Round
,(int)Value
。
编辑:好的我可能在这里错了,但我试图将其转换为9405510200883031584406,无论如何可能是一个字符串或不同的类型。
最终结果是跟踪号码,我开始的是运输公司为我提供的服务。
答案 0 :(得分:5)
我能想到的最接近的事情就是使用BigInteger
double d = 9.40551020088303E+21;
BigInteger bi = new BigInteger(d);
Console.WriteLine(bi.ToString());
输出将是:
9405510200883030261760
答案 1 :(得分:2)
你所描述的是不可能的。 int(Int32)数据类型的最大值为2147483647。
long(Int64)数据类型,最多只能达到9,223,372,036,854,775,807
无符号长(UInt64)可以转到18,446,744,073,709,551,615
对于任何这些数据类型,该数字太大了。
9,405,510,200,883,031,584,406 (Your value)
9,223,372,036,854,775,807 (Int64.MaxValue)
18,446,744,073,709,551,615 (UInt64.MaxValue)
答案 2 :(得分:1)
如果您只想将其转换为字符串,如问题那么它可以是字符串,也可以是不同的类型。这应该足够了。
decimal value = 9405510200883031584406m;
string str = value.ToString("F0");
但是,这假设您知道实际的完整数字。如果您不知道尾随数字,则无法将9.40551020088303E + 21转换为更精确的值。
您可以在Standard Numeric Format Strings
中查看格式定点(“F”)格式说明符将数字转换为字符串 形式为“-ddd.ddd ...”,其中每个“d”表示一个数字(0-9)。该 如果数字为负,则字符串以减号开头。该 precision specifier表示所需的小数位数。如果 精度说明符省略,当前 NumberFormatInfo.NumberDecimalDigits属性提供数字 精度。