他の人はすでに素晴らしい答えを出しました。スケールを整数にしたい場合(nがすでに整数である場合は意味があります)、次のことができます。
int scale = ((255 * n)/1024);
最大n=1024の場合、n * 255は常にintに収まるため、これらが数値である限り、これで問題が発生することはないことに注意してください。
より柔軟になります
int scale(int value, int old_max, int new_max){
java.math.BigInteger big_value = java.math.BigInteger.valueOf(value);
java.math.BigInteger big_old_max = java.math.BigInteger.valueOf(old_max);
java.math.BigInteger big_new_max = java.math.BigInteger.valueOf(new_max);
java.math.BigInteger mult = big_value.multiply(big_old_max);
return (int) mult.devide(big_new_max).doubleValue();
}
これは少し冗長であることを認めますが、この方法でintをオーバーフローさせることはありません
編集:
基本的に同じですが、不格好ではありません(ただし、数値が非常に大きい場合は、いくつかの精度エラーが発生する可能性があります)
int scale(int value, int old_max, int new_max){
double factor = (double) new_max / (double) old_max;
return factor * value;
}