任何人都可以用 c# 解决 x 吗?地板(x * 1.04)= 258
Can anyone Solve for x with c#? floor(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 的这条评论是我正在寻找的答案:
The mapping is injective, so it is reversible. Mathematically, you can
always recover the original quantity by using floor((qty + 1.0) /
1.04). Numerically, it's possible that there are some corner cases that might cause issues, but I didn't discover any for qty up to
10**6.
在此示例 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 的这条评论是我正在寻找的答案:
The mapping is injective, so it is reversible. Mathematically, you can always recover the original quantity by using floor((qty + 1.0) / 1.04). Numerically, it's possible that there are some corner cases that might cause issues, but I didn't discover any for qty up to 10**6.