私は以下のコードを持っていることがあります。0より大きいか0より小さい浮動小数点
何が原因でさまざまな結果が生じるのでしょうか?
0.00文字列はJSONオブジェクトに由来します。
(コード簡体字)
if(new Float("0.00")>0){
// do something
}
EDIT:
私は何を持っていることは、私はそのゼロ、ゼロより小さいかゼロ以上かどうかを判断したいいくつかの浮動小数点数です。値は、0.00,0.001または-0.001のようなものかもしれません。彼らが肯定的、否定的、または零であるかどうかをどのように判断するのですか?
編集:
多分私は値をどのように得るべきかを明確にする必要があります。私はBigDecimalについて読んで、役に立たないようにしようとしたので、問題を引き起こしているまったく別のものかもしれません。このコード使用:
値は(0.000この形式のLTを有する):JSONフィードから抽出された価格がゼロより大きいか小さいかどうかをテストするためにそして
price = new BigDecimal(stocksJSONArray.getJSONObject(i).getString("LT"));
を、私は、次の条件文を使用しました:
if(price.compareTo(BigDecimal.ZERO)==1){
// greater than zero
}
else if(price.compareTo(BigDecimal.ZERO)==-1){
// less than zero
}
このコードは、JSONフィードから読み込まれた多くの値についてループされています。そして結果から、ゼロであるprice
の一部はゼロより大きく処理され、一部はゼロより小さく処理されます。私は他の何かがここで問題を引き起こしていると疑っていますか?
また、データの精度に問題があるかどうかをテストしました。だから私はこのでした:
DecimalFormat frmt = new DecimalFormat("0.000000000000000000000000");
String formatted = frmt.format(stock.change);
をそして陽性とネガとして認識してしまったゼロのために、それのためのトレース値はまだ0.000000000000000000000000
、ない0.000000000000000000000001
またはそのような何かでした。
この回答は正しいものの、結果は変わるものではありません。 '0.00'は常にそのまま解析されますか?そして、浮動小数点値が初期化される値が、他の浮動小数点演算の結果ではないことは確かですか? – Jack
詳細については、「浮動小数点演算についての各コンピュータ科学者の知るべきこと」(http://docs.oracle.com/cd/E19957-01/806-3568/ncg_goldberg.html)を参照してください。私が言っていたことのほとんどが間違っていたので、私は私の答えを削除しました。この問題にはるかに熟練した人々がいる。 –