c#将字符串转换为双倍精度损失

本文关键字:精度 损失 字符串 转换 | 更新日期: 2023-09-27 18:20:19

我有以下内容:

string value = "9223372036854775807";
double parsedVal = double.Parse(value, CultureInfo.InvariantCulture);

并且结果是CCD_ 1,其不是完全相同的数字。如何在不损失精度的情况下将字符串转换为双精度?

c#将字符串转换为双倍精度损失

double只能保证16位(大约)小数位数的准确性。您可以尝试切换到decimal(它有更多的比特可供播放,并具有足够的净空来保持该值)。

由于定义了双精度(二进制浮点运算的(IEEE 754)标准),您无法在不损失精度的情况下将9223372036854775807转换为double

默认情况下,Double值包含15位小数精度,尽管在内部最多保持17位数字。

使用Decimal可以获得此处所需的精度。但是,请注意,Decimal将不会具有与double相同的存储范围

请参阅C#是否可以存储比doubles更精确的数据?