将浮点数转换为负数或正数

时间:2011-11-14 21:38:37

标签: c++ c

我有一个来自float的{​​{1}},我希望将其转换为0 to 100中的一个数字:

-20 to 20float,然后翻译为100

-20float,然后翻译为50

0float,然后翻译为0

这样做的最佳方法是什么?

8 个答案:

答案 0 :(得分:10)

[我将为您提供解决问题的方法,而不仅仅是答案,因为从长远来看它会更有用。]

您需要一个y = mx + c形式的线性变换,其中x是您的输入数字,y是您的输出数字,m和{{1}你需要提前确定的常数。

为此,您需要解决以下联立方程式:

c

请注意,我已经选择了两个您需要的转换示例,并将它们插入等式中。我本可以挑选任何两个。

答案 1 :(得分:3)

这个怎么样:(50. - x) * 0.4

答案 2 :(得分:2)

这样的事情应该做:

20 - val * 0.4

答案 3 :(得分:1)

 float procent = (myval - 50)/2.5f;

如果您需要整数,请使用(int) floor(procent)

答案 4 :(得分:1)

float translate(float f)
{
  return 20.0f - ((20.0f * f) / 50.0f);
}

答案 5 :(得分:1)

您想要实现的目标称为“线性插值”,可以在如下的常规函数​​中完成:

float linear_interpolate(float x, float x0, float x1, float y0, float y1)
{
  return y0 + (x - x0)*((y1-y0)/(x1-x0));
}

在你的情况下你会称之为(用你的in值替换x):

float value = linear_interpolate(x, 0.0f, 100.0f, -20.0f, 20.0f);

有关参考文章,请参阅http://en.wikipedia.org/wiki/Linear_interpolation

答案 6 :(得分:0)

((x / 2.5)- 20) * -1

这应该做到

答案 7 :(得分:0)

您需要计算斜率。由于你已经有3个点(0,-20)(50,0)(100,20),你可以做dx = 40/100 = 2/5(y的变化/ x的变化)和b = -20。然后定义一个函数(f(x)= mx + b)f(x)=(2/5)* x - 20,0 <= x <= 100。