以下のシナリオで行き詰まっています。
Xが1.5以下の場合、最終結果はx = 1になります。xが1.5より大きい場合、x = 2になります。
入力数はx/100になります。
たとえば、input = 0.015 => x = 1.5 => display x = 1。
私が得た問題は、浮動小数点数が不正確であるということです。たとえば、input = 0.015ですが、実際には0.01500000000000002のようになります。この場合、xは1.500000000000002であり、1.5よりも大きい=>ディスプレイ出力はx = 2です。
ランダムに発生するため、解決方法がわかりません。 0.5と同様に、1.5でも正しい結果が得られます。しかし、2.5、3.5、4.5、5.5では間違った結果が返されます。その後、6.5は再び正しい結果を返します。
私が実装したコードは以下の通りです:
float x = 0.015;
NumberFormat nf = DecimalFormat.getPercentInstance();
nf.setMaximumFractionDigits(0);
output = nf.format(x);
したがって、xに依存し、出力は正しいか間違っている可能性があります。それはとてもランダムです。
Math.round、Math.floor、Math.ceilsを使用しようとしましたが、浮動小数点数は予測不可能であるため、どれも動作しないようです。
解決策について何か提案はありますか?
前もって感謝します。
これが私の古いコードゴルフの答えです。
public class Main {
public static void main(String[] args) {
System.out.println(math(1.5f));
System.out.println(math(1.500001f));
System.out.println(math(1.49999f));
}
public static int math(float f) {
int c = (int) ((f) + 0.5f);
float n = f + 0.5f;
return (n - c) % 2 == 0 ? (int) f : c;
}
}
出力:
1
2
1
String.format
。
String s = String.format("%.2f", 1.2975118);
float
値fを小数点以下2桁に丸める。
String s = String.format("%.2f", f);
String
をfloat
に変換するには...
float number = Float.valueOf(s)
float
をint
に丸めたい場合は、達成したい結果に応じて、floatをintにダウンキャストするさまざまな方法があります。
丸め(指定された浮動小数点に最も近い整数)
int i = Math.round(f);
例
f = 2.0-> i = 2; f = 2.22-> i = 2; f = 2.68-> i = 3
f = -2.0-> i = -2; f = -2.22-> i = -2; f = -2.68-> i = -3
私は同じ問題に直面していました、DecimalFormat
を使用しました。これは役立つかもしれません。
float x = 1.500000000000002f;
DecimalFormat df = new DecimalFormat("###.######");
long l = df.format(x);
System.out.println("Value of l:"+l);
私は簡単な答えが好きです
Math.round(1.6); // Output:- 2
Math.round(1.5); // Output:- 2
Math.round(1.4); // Output:- 1