可能重复:
Convert a number range to another range, maintaining ratio
所以我有一个函数返回0到255之间的值,我需要将这些值转换为介于-255和255之间的值 所以200大概是145,150大约是45等等。 我看过Convert a number range to another range, maintaining ratio,但那里的公式不起作用。 我可以使用的任何其他公式吗?
答案 0 :(得分:34)
public static int ConvertRange(
int originalStart, int originalEnd, // original range
int newStart, int newEnd, // desired range
int value) // value to convert
{
double scale = (double)(newEnd - newStart) / (originalEnd - originalStart);
return (int)(newStart + ((value - originalStart) * scale));
}
答案 1 :(得分:4)
试试这个:
int Adjust( int num )
{
return num * 2 - 255;
}
答案 2 :(得分:1)
任意范围的一般解决方案......
var val1 = 200;
var min1 = 0;
var max1 = 255;
var range1 = max1 - min1;
var min2 = -255;
var max2 = 255;
var range2 = max2 - min2;
var val2 = val1*range2/range1 + min2;
答案 3 :(得分:1)
public int ConvertRange(
int originalStart, int originalEnd,
int newStart, int newEnd,
int value)
{
int originalDiff = originalEnd - originalStart;
int newDiff = newEnd - newStart;
int ratio = newDiff / originalDiff;
int newProduct = value * ratio;
int finalValue = newProduct + newStart;
return finalValue;
}
答案 4 :(得分:0)
调整=原始/ 255 * 510 - 255
145 = 200 / 255 * 510 - 255
45 = 145 / 255 * 510 - 255