0

C#十进制类型存在这个问题:

Console.WriteLine( 1m/3 + 1m/3 == 2m/3 );

False

只有除以 2 或 5 才能准确表示数字,否则结果可能是重复十进制数

正如之前在 Stack Overflow 上提到的(C# 有理算术),实现存储两个小数、分子和分母并精确执行乘法和除法的东西是完全可能的。它可以在需要时使用欧几里得算法简化分数。还应该实现一些到双精度或十进制的显式转换。

这里这里介绍了一些有理商的实现。还有一个Microsoft Solver Foundation结构Rational

如何decimal在 C# 中实现,是否可以复制此实现并对其进行修改以处理重复 decimal的 s ?

在此处此处的 SO 答案中有一些与重复小数相关的试验

4

1 回答 1

9

decimal被实现为有效数、符号和指数,基本上 - 一个浮点数,其中“点”是小数点而不是二进制点(根据floatdouble)。有关更多详细信息,请参阅我关于该主题的文章。(请注意,不像floatdouble,decimal没有标准化 - 例如,它将保留尾随无关紧要的零。)

如果你想创建你自己的RationalNumber类型,你可以这样做,但你不想从源代码开始decimal- 你也不能改变decimal你的类型的含义。

于 2013-11-08T15:37:04.990 回答