5

既知の最小値と最大値の間に 10 個の値を持つスケールがあるとします。最小値と最大値の間の値のスケールで最も近い値を取得するにはどうすればよいですか? 例:

min = 0, max = 10, value = 2.75 -> expected: value = 3
min = 5, max = 6, value = 5.12 -> expected: value = 5.1
min = 0, max = 1, value = 0.06 -> expected: value = 0.1
4

6 に答える 6

5

このようなものを使用できます

function nearest(value, min, max, steps) {
  var zerone = Math.round((value - min) * steps / (max - min)) / steps; // bring to 0-1 range    
  zerone = Math.min(Math.max(zerone, 0), 1) // keep in range in case value is off limits
  return zerone * (max - min) + min;
}

console.log(nearest(2.75, 0, 10, 10)); // 3
console.log(nearest(5.12, 5, 6, 10)); // 5.1
console.log(nearest(0.06, 0, 1, 10)); // 0.1

http://jsfiddle.net/gaby/4RN37/1/のデモ

于 2012-11-29T21:54:10.907 に答える
2

あなたのシナリオは私にはあまり意味がありません。.06 が 1 に丸められ、.1 ではなく 5.12 が同じスケール (1 整数) で 5.1 に丸められるのはなぜですか? ややこしい。

いずれにせよ、正確な小数点以下の桁数に丸めたい場合は、これをチェックしてください: http://www.javascriptkit.com/javatutors/round.shtml

var original=28.453

1) //round "original" to two decimals
var result=Math.round(original*100)/100  //returns 28.45

2) // round "original" to 1 decimal
var result=Math.round(original*10)/10  //returns 28.5

3) //round 8.111111 to 3 decimals
var result=Math.round(8.111111*1000)/1000  //returns 8.111

このチュートリアルを使用すると、必要なことを正確に実行できるはずです。

于 2012-11-29T21:15:22.580 に答える
1

おそらくもっと理解しやすい:

var numberOfSteps = 10;
var step = (max - min) / numberOfSteps;
var difference = start - min;
var stepsToDifference = Math.round(difference / step);
var answer = min + step * stepsToDifference;

これにより、シーケンスのステップ数を変更することもできます。

于 2012-11-29T21:20:20.203 に答える
1

私はそのようなものを提案します:

var step = (max - min) / 10;
return Math.round(value / step) * step;
于 2012-11-29T21:21:22.233 に答える
-1
var step = 10;
return Math.ceil(x / step) * step;
于 2019-04-17T09:22:36.037 に答える