0

n が Double 型の変数であるとします。

double right=n-(Math.ceil(n)-1);

//Here I am trying to get the right part of the number.

今ならn=1234.78

それからright=0.7799999999999727

なぜ.78ですか?

そしていつ

n=1234.89

それからright=0.8900000000001

なぜ89ですか?なぜ9999...ここでは....の代わりに000000

ここで、右の数字の合計を見つけたいとします..私の例のように、1234.89 は 8+9=17 または 1234.781 は 7+8+1-16 です。じゃあどうすればいいの?

しかし、浮動小数点演算を使用してそれを行うことはできませんか?のように

double temp=0.0; 
while(right>0) 
{ 
right=rigth*10; 
temp=Math.floor(right); 
right=right-temp; 
suml+=temp; 
} 

私が上で述べたような方法で?私はJavaが初めてです。私の問題を説明してください。それは私にとって大きな助けになるでしょう。ありがとうございました。

4

2 に答える 2

0

浮動小数点はほとんどすべての言語で同じように機能し、同じ問題が発生します。小数部分が必要な場合は、使用する必要があります。

double fract = n - (long) n;

あなたが使用している数式は、負の数に対しては機能しないと思います。(そして遅い)

これにより、ご覧のように丸め誤差が発生する可能性があるため、精度のレベルを選択する必要があります。2 桁または 6 桁を選択できます。計算時に値を丸めることができますが、多くの場合、印刷時に丸める方が簡単です。

System.out.printf("%.2f%n", fract);

これは期待どおりに印刷0.78されます。0.89

于 2012-12-14T10:48:58.447 に答える
0

次のコードを使用できます

    double roundTwoDecimals(double d) {
                DecimalFormat twoDForm = new DecimalFormat("#.##");
            return Double.valueOf(twoDForm.format(d));
    }
right=roundTwoDecimals(right);
    System.out.println(right);

望ましい結果が得られます。

于 2012-12-14T10:40:01.300 に答える