2017-12-07 6 views
0

私はしきい値が定義されたファイルを持っており、これらのしきい値は決定に役立ちます。チェックする価値が0.2500000001のようなものであれば、それは0.25と0.26の間に収まる小数のある値が定義された範囲にあるかどうかを検証する最も良い方法は何ですか

for (Threshold threshold : thresholds) { 
    if ((threshold.getMin() <= predictionValue) && 
     (predictionValue <= threshold.getMax())) { 
      return threshold.getText(); 
    } 
} 

"thresholds":[ 
    { "min": 0.0, "max": 0.25, "text": "VERY UNLIKELY" }, 
    { "min": 0.26, "max": 0.50, "text": "UNLIKELY" } 
    { "min": 0.51, "max": 0.75, "text": "LIKELY" } 
    { "min": 0.76, "max": 1.0, "text": "VERY LIKELY" } 
] 

条件:

値は次のようになります。だから私は、値が空のギャップを持たない一定の範囲にあるかどうかを判断する最適な方法は何ですか?

精度のパラメータを追加し、この精度を最小値&最大値に適用する必要がありますか?私は0.259999999のような値でファイルを設定する必要はありません。

+1

上限値が含まれていない半開きの間隔として定義できます。例:min:0 - max 0.26 < - そしてあなたの値が> = minと

+0

@ OHGODSPIDERSはいいいですね! –

+0

BigDecimalクラスを使用できる小数点以下の桁精度を求める場合は、double/floatを直接渡すと、それでも不正確になるので、BigDecimal(String val)コンストラクタを使用することを確認してください。 https://docs.oracle。 com/javase/7/docs/api/java/math/BigDecimal.html – prsvr

答えて

1

境界を2つの値で宣言したいので、このグレーゾーンになります。これは動作しません。

は、あなたが何をすべき:

"thresholds":[ 
    { "max": 0.25, "text": "VERY UNLIKELY" }, 
    { "max": 0.50, "text": "UNLIKELY" } 
    { "max": 0.75, "text": "LIKELY" } 
    { "max": 1.0, "text": "VERY LIKELY" } 
] 

、条件:

for (Threshold threshold : thresholds) { 
    if (predictionValue < threshold.getMax()) { 
      return threshold.getText(); 
    } 
} 

あなたが見ることができるように、1つの値で十分私はあなたにそれがどのように動作するかのアイデアを与えるだろう境界を定義する。

+0

これを処理するのがおそらく最善の方法です。ありがとう –

関連する問題