如何编写对称版本的捕捉到值公式(C#)
我想写一个组件,它可以将一个值向上移动一个增量,或者移动到最近的增量 假设增量为0.0005,对于Up()方法,以下是预期的输入和输出:如何编写对称版本的捕捉到值公式(C#),c#,algorithm,math,equation,C#,Algorithm,Math,Equation,我想写一个组件,它可以将一个值向上移动一个增量,或者移动到最近的增量 假设增量为0.0005,对于Up()方法,以下是预期的输入和输出: 1.0005->1.0010(增量时,使其按增量移动) 1.0006->1.0010(不是增量,所以移动到增量) 1.0007->1.0010 1.0008->1.0010 1.0009->1.0010 1.0010->1.0015(增量时,使其按增量移动) 1.0011->1.0015 1.0012->1.0015 等 Down()方法也会这样做,相反
- 1.0005->1.0010(增量时,使其按增量移动)
- 1.0006->1.0010(不是增量,所以移动到增量)
- 1.0007->1.0010
- 1.0008->1.0010
- 1.0009->1.0010
- 1.0010->1.0015(增量时,使其按增量移动)
- 1.0011->1.0015
- 1.0012->1.0015
- 等
返回(值+增量)-(值%增量)代码>
我原以为Down()方法会类似,但我找不到它是什么。我能让它工作的唯一方法是:
decimal mod = value % increment;
return mod != 0 ? value - mod : value - increment
当然,如果相反的操作是相同的,那么公式应该是相同的。公式
value - Abs(value % increment) + Abs(increment/2) + increment/2
以值1.0006为例,增量为(+957;)0.0005
向上增量为+0.0005时
1.0006-0.0001+0.00025+0.00025 = 1.0010
向下增量为-0.0005时
1.0006-0.0001+0.00025-0.00025 = 1.0005
公式
value - Abs(value % increment) + Abs(increment/2) + increment/2
以值1.0006为例,增量为(+957;)0.0005
向上增量为+0.0005时
1.0006-0.0001+0.00025+0.00025 = 1.0010
向下增量为-0.0005时
1.0006-0.0001+0.00025-0.00025 = 1.0005
替换三元表达式<如果inc
为负,则code>Math.Pow(signInc,2)-signInc)/2返回1,否则返回0Math.Abs(数学符号(mod))
如果mod
为0,则返回0,否则返回1;如果inc<0&&mod!=0,否则为0
替换三元表达式<如果inc
为负,则code>Math.Pow(signInc,2)-signInc)/2返回1,否则返回0Math.Abs(数学符号(mod))
如果mod
为0,则返回0,否则返回1;如果inc<0&&mod!=0
和0,否则。您可以创建一个枚举所有值的函数,并在上/下方向(您可以选择)简单地查找最接近给定值的值。您可以创建一个枚举所有值的函数,并在上/下方向(您可以选择)简单地查找最接近给定值的值。我假设down(1.0006)
应该给出1.0005
,而不是1.0000
。我假设Down(1.0006)
应该给出1.0005
,而不是1.0000
。这两种方法都适用,谢谢!有没有不使用三元运算符的方法?我只是好奇多于一切。看起来,如果三元数对Up不是必需的,那么对Down也应该是必需的?这两种方法都适用,谢谢!有没有不使用三元运算符的方法?我只是好奇多于一切。看起来,如果三元数对Up不是必需的,那么对Down也是必需的?