C# 将长双精度转换为整数?

C# 将长双精度转换为整数?,c#,rounding,C#,Rounding,正在尝试转换以下值: 9.40551020088303E+21 到 9405510200883031584406 我是一个迷,但不知该怎么做数学圆,(int)值 编辑:好的,我可能错了,但我正在尝试将其转换为9405510200883031584406。无论如何,它可能是字符串,也可能是其他类型 最后的结果是一个跟踪号码,我从船运公司提供给我的开始。你所描述的是不可能的。int()数据类型的最大值为2147483647 long()数据类型最多只能为9223372036854775807 未签名

正在尝试转换以下值:

9.40551020088303E+21

9405510200883031584406

我是一个迷,但不知该怎么做<代码>数学圆,
(int)值

编辑:好的,我可能错了,但我正在尝试将其转换为9405510200883031584406。无论如何,它可能是字符串,也可能是其他类型


最后的结果是一个跟踪号码,我从船运公司提供给我的开始。

你所描述的是不可能的。int()数据类型的最大值为2147483647

long()数据类型最多只能为9223372036854775807

未签名的long()可以转到18446744073709551615

对于任何这些数据类型来说,这个数字都太大了

 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)

我能想到的最接近的事情就是使用

产出将是:

9405510200883030261760

如果你只是想把它转换成一个字符串,就像你的问题一样,它可以是一个字符串,也可以是不同的类型。这样就足够了

        decimal value = 9405510200883031584406m;
        string str = value.ToString("F0");
但是,这假设您知道实际的完整数字。如果不知道尾随数字,则无法将9.40551020088303E+21转换为更精确的值

您可以查看如何在中设置格式

定点(“F)格式说明符将数字转换为字符串 格式“-ddd.ddd…”,其中每个“d”表示一个数字(0-9) 如果数字为负数,则字符串以减号开头 精度说明符指示所需的小数位数。如果 省略精度说明符,当前 NumberFormatInfo.NumberDecimalDigits属性提供数字 精确性


你是指一个字节数组,还是一个整数数组?单个整数的最大大小是2147483647。请检查BigDecimal..或者如果你想让它是一个整数,好的,我可能错了,但我正在尝试将其转换为9405510200883031584406。无论如何,它可能是字符串,也可能是其他类型。在quesiton上更新了编辑。这是一个我正试图从船运公司给我的原始值中输出跟踪号。@Christian.K-谢谢您的编辑。这样更容易阅读。一个重要的注意事项是,最后一个
0261760
是双精度存储方式的副作用,无法取回原始
1584406
        decimal value = 9405510200883031584406m;
        string str = value.ToString("F0");