标签: c#
我有以下内容:
string value = "9223372036854775807"; double parsedVal = double.Parse(value, CultureInfo.InvariantCulture);
...结果是9.2233720368547758E+18,这不是完全相同的数字。如何在不损失精度的情况下将字符串转换为double?
9.2233720368547758E+18
答案 0 :(得分:8)
double只能保证16(大约)十进制数字的准确性。您可以尝试切换到decimal(可以使用更多的位,并保留该值,并留有足够的空间)。
double
decimal
答案 1 :(得分:4)
由于定义了二进制浮点算术的双((double)标准,因此无法在不损失精度的情况下将9223372036854775807转换为IEEE 754。
默认情况下,Double值包含15个十进制数字的精度, 虽然内部最多保留17位数字。
答案 2 :(得分:1)
使用Decimal可以获得您需要的精度。但请注意,Decimal的存储范围与double不同。
请参阅Can C# store more precise data than doubles?