我想知道在C ++中是否有任何方法可以计算在变量和极值中都可能存在负值的比例。
我的目标是将浮动文本输入窗口小部件与固定的极值同步(例如,用户可以在A,B = any_constant_real_number之间输入A(最小值)和B(最大值)之间的任何双值),滑块只能在0和100(简化)。
如果A和B都是正面的,那么一切都是微不足道的。如 val_slider =((val_textin-A)* 100)/(B-A)
但由于A和B可以假设为真实,它在我看来唯一的可能性是使用几个if / case,或涉及大量abs()的大型公式,并检查0-division,它们非常容易出错,与这么简单的任务相比,成本非常高。
在c / c ++ / stl中有没有更快更短的方法来实现相同的目标?
请原谅我糟糕的英语。任何提示?谢谢。答案 0 :(得分:3)
您的公式也可以正常使用负值A
和B
,并记录为A < B
。
例如,如果您希望用户能够输入-100到100之间的值,并将这些值映射到0-100的滑块,当用户输入-90时,您将获得:
((-90 - A) * 100) / (B - A) = ((-90 - (-100)) * 100) / (100 - (-100))
= 10 * 100 / 200
= 5
输入值为50会导致滑块值为:
((50 - A) * 100) / (B - A) = ((50 - (-100)) * 100) / (100 - (-100))
= 150 * 100 / 200
= 75
答案 1 :(得分:1)
我不懂C ++,但我知道数学,所以试试:
val_slider = 100 * ( val_textin - A ) / ( B - A )
嘿等等。这正是你所拥有的。测试用例..
A = -200,B = + 200,val_texin = 100(75%的吧,对吧?)
val_slider = 100 *(100 - -200)/(200 - - 200) =(300)/(400)* 100 = 75
看,你做得对。可能发生的唯一事情是B == A,但这不能用数学计算,需要一个IF。如果它们相等,则val_slider正好是B(或A,因为它们相等)。