将long Double转换为Int?

时间:2013-12-18 20:01:13

标签: c# rounding

尝试转换以下值:

9.40551020088303E + 21

9405510200883031584406

我很遗憾但是如何做到这一点? Math.Round(int)Value

编辑:好的我可能在这里错了,但我试图将其转换为9405510200883031584406,无论如何可能是一个字符串或不同的类型。

最终结果是跟踪号码,我开始的是运输公司为我提供的服务。

3 个答案:

答案 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属性提供数字   精度。