c# - 尽可能完美的十进制算术
问题描述
我在 C# 中使用十进制类型来避免二进制浮点算术引入的错误,但在处理导致小数点后无限位数的除法时仍然会出现精度错误。而在进行此类计算时使用分数格式手动完成时,它可能会产生完美的结果。考虑以下几点:
decimal a = 32;
decimal b = 65;
decimal c = 130;
decimal d = a / b * c;
d 的计算结果为 63.999999999999999999999999999M。但是如果我们手动使用分数格式,我们可以很容易地找到 64。
是否有这样的库将这种算术组织成分数格式并在可能的情况下进行完美的计算。
Windows 上的计算器似乎正在这样做。
解决方案
BigRational
似乎是一个好方法:
decimal a = 32;
decimal b = 65;
decimal c = 130;
Numerics.BigRational d = (Numerics.BigRational)a / b * c;
decimal e = (decimal)d;
e
有价值64
。
推荐阅读
- python - 如何使用python向sharepoint o365文件所有者发送电子邮件
- javascript - 我在尝试发送嵌入时遇到错误
- wordpress - 编辑和重置所有文件夹、子文件夹和文件的权限
- firebase - Firebase 实时数据库规则自动从真变为假如何解决?
- java - JPA:通过给定列的值列表获取实体列表
- php - 我的 PHP 源代码无法在 WSL 上使用 Apache2 正确执行,始终需要重新启动以应用更改
- javascript - 如何在单个 Azure Web App 中托管 Express 静态站点和 API
- git - 如何使用 Git 开发两个独立的功能分支
- c - Mac 如何读取由旧 SGI(680x0 摩托罗拉 CPU)创建的二进制数据文件?
- python-3.x - Multiproccessing Pipe() Wrapper Broken: 有东西挂了。V5