将范围内的数字转换为另一范围内的数字

可能重复:
将数字范围转换为另一个范围,保持比率

所以我有一个函数返回0和255之间的值,我需要将这些值转换为介于-255和255之间的东西所以200大约是145,150大约是45,依此类推..我看过转换一个数字范围到另一个范围,保持比例但公式不起作用。 我可以使用的任何其他公式?

试试这个:

int Adjust( int num ) { return num * 2 - 255; } 
 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)); } 

任意范围的一般解决方案……

 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; 
 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; } 

调整=原始/ 255 * 510 – 255

 145 = 200 / 255 * 510 - 255 45 = 145 / 255 * 510 - 255