谁能用c#解决x?地板x * 1.04= 258

问题描述

在此示例 249 中,我将 4% 的下限添加到 int 中。但每次都会是不同的 int。 这是我的代码效果很好。

int qty = 249;
qty += Convert.ToInt32(Math.Floor((double)qty * 0.04));

但是出现的问题是在程序稍后的某个时间之后,并且在我不再拥有原始值之后,我需要使用新值恢复到旧值。我不能只减去 4%,因为虽然它有时在很多时候都有效,但它是不准确的。我最接近的是这个

double d = Math.Round((double)qty * 0.036);
qty = Convert.ToInt32((double)qty - d);

在大多数情况下使用较小的数字是准确的,但并非总是如此。 我确实想出了一个方程,如果我可以求解 x 并得到一个整数,它应该可以工作,但到目前为止,我对如何求解 x 感到困惑。这是我想出的方程 solve for x,floor(x*1.04) = 258 。任何人都可以解决这个问题并让它给我一个整数,或者有没有人对如何在不将旧值存储在任何地方的情况下做到这一点有更好的想法? 我很清楚我可以存储旧值,但如果它可以通过简单的数学问题轻松可逆,那么我认为没有理由存储它。此外,这将在大量项目上完成,因此它不会只存储一个原始值,而是数千个。

解决方法

@MarkDickinson 的这条评论正是我要找的答案:

映射是单射的,所以它是可逆的。在数学上,你可以 始终使用 floor((qty + 1.0) / 1.04)。从数字上讲,可能存在一些可能导致问题的极端情况,但我没有发现任何数量高达 10**6.