Sql server 如何解x+;天花板(x)和#x2B;c=y,代表x

Sql server 如何解x+;天花板(x)和#x2B;c=y,代表x,sql-server,math,Sql Server,Math,我正在进行一个SQL server项目,根据一些规则在两种类型的汽车价格(例如,x是原价,y是经销商要价)之间进行转换,以便对于每个给定的经销商要价y,我可以得到相应的原价x。我遇到的转换规则是:x+5*上限(x/100)+某个常数c=y,x= (实际上,这更像是一道数学题。例如,如果规则像x+10=y那么简单,那么x=y-10。)事实上,这是一道数学题,应该继续提问 也就是说,请注意,在等式x+ceil(x)+c=y中,x和y-c仅相差一个整数(取决于x)。由于x+ceil(x)是x的递增函数

我正在进行一个SQL server项目,根据一些规则在两种类型的汽车价格(例如,x是原价,y是经销商要价)之间进行转换,以便对于每个给定的经销商要价y,我可以得到相应的原价x。我遇到的转换规则是:x+5*上限(x/100)+某个常数c=y,x=


(实际上,这更像是一道数学题。例如,如果规则像x+10=y那么简单,那么x=y-10。)

事实上,这是一道数学题,应该继续提问

也就是说,请注意,在等式x+ceil(x)+c=y中,x和y-c仅相差一个整数(取决于x)。由于x+ceil(x)是x的递增函数,如果有解决方案,它是唯一的

另一句话:

  • 对于(0,1)中的x,x+ceil(x)位于(1,2)
  • 对于(1,2)中的x,x+ceil(x)位于(3,4)
也就是说,只有当某个整数n的y-c在(2n-1,2n)中时,才有解。然后,x=y-c-n

我们如何找到n?那么,y-c在(2n-1,2n]iff(y-c)/2在(n-1/2,n)中,所以我们必须有n=ceil((y-c)/2)


对于方程x+5ceil(x/100)=y-c来说,这并不难

现在,

  • 对于x英寸(0100),x+5ceil(x/100)英寸(5105]
  • 对于x英寸(100200),x+5ceil(x/100)英寸(110210]
  • 对于x英寸(100(n-1),100n],x+5ceil(x/100)英寸(105n-100105N]
同样,有些值无法达到,如果有解决方案,它是唯一的。 如果对于某些n,y-c位于(105n-100105n),那么x=y-c-5n


当然,您需要找到n。请注意,(105n-100105n]iff(y-c)/105中的y-c在(n-100/105,n)中,这是(n-1,n)的子集。因此,如果有解决方案,您必须有n=ceil((y-c)/105)。

不是完整答案,但对于 Y=X+天花板(X)

这适用于我测试过的X的所有值。第一种情况是当X是一个整数时

编辑

对于Y=X+5*上限(X)/100的情况,我们可以推测,如果X是整数,那么Y=X+5/100*X=>1.05*X;如果X不是整数,那么Y=X+5/100(X+1)=>1.05*X+0.05

因此,我认为以下内容适用于您的案例:

declare @X float = 3.1
declare @Y float = 0.0
SELECT @y = @x + 5*ceiling(@X)/100


SELECT CASE WHEN (ROUND(@y/1.05,0) = @y/1.05) THEN @y / 1.05
        ELSE ROUND((@y - 0.05) / 1.05,2) END

对于常数的情况,在不知道常数的情况下,我看不出如何解决这个问题。

谢谢你的回答!但我在推广到x+5*上限(x/100)时遇到了困难+一些常数c=y。你能给我一些关于这一点的提示吗?信息不够。满足任何给定y的X值将占据一个范围。非常感谢!这太神奇了!
declare @X float = 3.1
declare @Y float = 0.0
SELECT @y = @x + 5*ceiling(@X)/100


SELECT CASE WHEN (ROUND(@y/1.05,0) = @y/1.05) THEN @y / 1.05
        ELSE ROUND((@y - 0.05) / 1.05,2) END