相关疑难解决方法(0)

为什么浮点数不准确?

为什么有些数字在存储为浮点数时会失去准确性?

例如,十进制数9.2可以精确地表示为两个十进制整数(92/10)的比率,两者都可以用二进制(0b1011100/0b1010)精确表示.但是,存储为浮点数的相同比率永远不会完全等于9.2:

32-bit "single precision" float: 9.19999980926513671875
64-bit "double precision" float: 9.199999999999999289457264239899814128875732421875
Run Code Online (Sandbox Code Playgroud)

这样一个看似简单的数字如何在64位内存中表达"太大" ?

language-agnostic floating-point precision

181
推荐指数
4
解决办法
3万
查看次数

C#的浮点比较函数

有人可以在C#中指向(或显示)一些好的通用浮点比较函数来比较浮点值吗?我想实现的功能IsEqual,IsGreater一个IsLess.我也只关心双打不漂浮.

.net c# floating-point

65
推荐指数
7
解决办法
9万
查看次数

C#加倍到十进制精度损失

我有一个双"138630.78380386264",我想将它转换为十进制,但是当我这样做时,我通过铸造或使用Convert.ToDecimal(),我失去精度.

这是怎么回事?decimal和double都可以保存这个数字:

在此输入图像描述

double doub = double.Parse("138630.78380386264");
decimal dec = decimal.Parse("138630.78380386264");
string decs = dec.ToString("F17");
string doubse =DoubleConverter.ToExactString(doub);
string doubs = doub.ToString("F17");

decimal decC = (decimal) doub;
string doudeccs = decC.ToString("F17");
decimal decConv = Convert.ToDecimal(doub);
string doudecs = decConv.ToString("F17");
Run Code Online (Sandbox Code Playgroud)

另外:如何使用ToString()on double打印出与调试器显示的相同的结果?例如138630.78380386264

c# precision double decimal

29
推荐指数
2
解决办法
3万
查看次数