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位。