我需要对分数进行一些计算,结果具有无限小数。 例如:
240/360=0.666666...
输出具有无限小数,当我将其乘以整数时,结果必须是整数。所以我用这种方式编码:
result = someInteger * decimal.divide(240/360);
(尝试使用someInteger = 2,700) 但结果有十进制值,一些计算器甚至电子表格会输出整数结果。 如何在c#中获得相同的结果?
由于
答案 0 :(得分:12)
输出具有无限小数,当我将其乘以整数时,结果必须是整数。
这不会真的发生。
你可以做的是小心舍入(乘法后)。
或者代替
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
}
libraries and examples如何做到这一点。
但请注意,你仍然无法完全代表π。
答案 1 :(得分:1)
你可以将分子和分母分别作为整数存储并在除数之前将分子乘以,这不会解决每个问题,尽管1/3 * 2仍会给出无限小数。这也仅适用于有理数。
答案 2 :(得分:0)
使用Math.Round()
result = someInteger * decimal.divide(240/360);
result = Math.Round(result);
返回整数是你要求做的正确吗?
答案 3 :(得分:0)
许多应用程序通过中间计算执行伪分数数学,其准确度高于最终需要/输出给用户的程度(Office执行此操作)。如果这不是您想要的,并且您想要执行真正的小数数学,那么请搜索Fractions实现。似乎有一个不错的实施here。这种实现的问题在于,由于有效,因此在功能上是正确的。因此,如果您的应用程序需要使用分数执行数百万次操作,那么其性能可能会受到影响。