C#十进制类型存在这个问题:
Console.WriteLine( 1m/3 + 1m/3 == 2m/3 );
False
只有除以 2 或 5 才能准确表示数字,否则结果可能是重复十进制数。
正如之前在 Stack Overflow 上提到的(C# 有理算术),实现存储两个小数、分子和分母并精确执行乘法和除法的东西是完全可能的。它可以在需要时使用欧几里得算法简化分数。还应该实现一些到双精度或十进制的显式转换。
这里和这里介绍了一些有理商的实现。还有一个Microsoft Solver Foundation结构Rational。
如何decimal
在 C# 中实现,是否可以复制此实现并对其进行修改以处理重复 decimal
的 s ?