C# 中十进制的实现.是否可以修改它以支持重复的小数



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

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

它只能在除以 2 或 5 时精确地表示数字,否则结果可能是重复的十进制数。

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

这里

和这里提供了一些有理商实现。还有一个Microsoft求解器基础结构 Rational。

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

这里有一些与重复小数相关的试验,SO答案中出现在这里和这里

decimal实现为

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

如果你想创建自己的RationalNumber类型,你可以这样做,但你不想从源代码开始decimal - 你也无法将decimal的含义更改为表示你的类型。

最新更新