为什么转换为双精度做四舍五入最后两位数字c#?


    static void Main()
    {
       var result1 = Converter.ConvertToInt32("922336666");
       //result1 one return as 922336666
       var result2 = Converter.ConvertToInt64("92233720368547758");
       //result2 one return as 92233720368547760
    }
}
public static class Converter {
    public static int ConvertToInt32(string input) {
        return Convert.ToInt32(Math.Round(Convert.ToDouble(input)));
    }
    public static Int64 ConvertToInt64(string input)
    {
        return Convert.ToInt64(Math.Round(Convert.ToDouble(input)));
    }
}

我得到result2四舍五入到92233720368547760,但result1保持不变。有人能解释一下吗?当使用ToDouble时,int ?

四舍五入

系统文档。Double Struct (c#中的double)表示:

Double值的精度为15位小数

存储了大约17位数字,但不能保证额外的数字是精确的。请注意,该数字实际上是以二进制格式存储的,因此十进制位数的数量只是一个近似值。

第二个号码有17位。这解释了为什么转换不准确。

使用系统。改用十进制结构(c#中的decimal)。根据浮点数字类型(c#参考),它的精度为28-29位。

最新更新