存储无限小数c#

本文关键字:小数 无限 存储 | 更新日期: 2023-09-27 18:17:02

我需要用分数做一些计算,结果有无限小数。例如:

240/360=0.666666...

输出有无限个小数,当我将它乘以一个整数时,结果一定是一个整数。所以我这样编码:

result = someInteger * decimal.divide(240/360);

(Try with someInteger = 2,700)但是结果是十进制值,一些计算器甚至电子表格会输出整数结果。如何在c#中获得相同的结果?

谢谢

存储无限小数c#

输出有无限个小数,当我将它乘以一个整数时,结果一定是一个整数。

那不会真的发生。

你能做的是小心地四舍五入(在乘法之后)。

或者代替

 result = someInteger * decimal.divide(240/360);

可以用

 result = someInteger * 240 / 360;

有什么问题吗?

当你非常认真地处理分数并且保持的精度时,你需要一个特殊的类型:

struct Rational 
{
  public readonly int Numerator;
  public readonly int Denominator;
  // lots of members, including operators
}

有一些库和示例说明如何做到这一点。

但请注意,您仍然无法表示π没错。

你可以将分子和分母分别存储为整数,在除法之前先将分子相乘,但这并不能解决所有问题,因为1/3 * 2仍然会得到一个无限小数。这也只适用于有理数

use Math.Round()

result = someInteger * decimal.divide(240/360);
result = Math.Round(result);

返回一个整数是你要求做的,对吗?

许多应用程序通过进行中间计算来执行伪分数数学,其精度高于最终需要/输出给用户的精度(Office就是这样做的)。如果这不是您想要的,并且您想要执行真正的分数数学,那么请搜索分数实现。这里似乎有一个不错的实现。这种实现的问题在于,责任在于功能的正确性,而不是效率。因此,如果您的应用程序需要执行数以百万计的分数操作,那么它的性能可能会受到影响。