2017-03-27 10 views
-3

最後に49と99で終わる二重丸めが必要です。fxは2138を2149に丸め、2150を99に丸める必要があります。 1〜48の数値は49になり、50〜98の数値は99 になります。小数点以下を切り捨てることについては、99,です。値が小数点以下0桁に丸められているため、小数点以下を切り捨てるjava

あなたは、あなたの現在の数を倍増するだろう使用することができ
DecimalFormat decimalFormat = new DecimalFormat("#"); 
String fromattedDouble = decimalFormat.format(xxx); 
+1

は、2149年に切り上げされなければならない*何? – Ravi

+0

正確なロジックは何ですか?この質問からは不明です。 – TDG

+0

2150は2249に丸められる必要がありますか? –

答えて

0

1つのトリックは、2で割る、最寄りの100にそれを丸める:

int start = 2132;     // 2132 
start = start*2;     // 4264 
start = (start + 50)/100 * 100; // (4264 + 50)/100 * 100 = 4300 
start = start/2;    // 2150 
start = start - 1;    // 2149 

このロジックを使用:

2100 -> 2099 
2132 -> 2149 
2150 -> 2149 
+0

2132 - > 2157か、あなたのロジックの何かが欠けていますか? – TDG

+0

ええ、それは 'int' divisonです。 – TDG

+1

@TDG切り詰めが明白ではないと思ったのですが、私のコメントはもう少し明確にしました。また、なぜOPが2149年に回りたいのか分かりませんが、これは私には意味がありません。 –

1

これは、あなたが欲しいものを行う必要があります。

public static int round(int value) { 
    return ((value + 50)/50 * 50) - 1; 
} 
+0

@downvoter、話す。 – shmosel

+1

めったにしません。私はここで、苦情は "あなたが欲しいものをすべきだ"ということは本当に説明ではないということができると思います。その時残っているのはコードだけの答えです。 – GhostCat

+0

@GhostCatそれは可能です。簡単な数学の方程式を説明するのは少し冗長だと思った。 – shmosel

0

あなたがこの方法で使用することができます:

public static int round(double value) { 
    value = Math.round(value); 
    return (int)(value-(value%50))+49; 
} 

テストケース

0  -> 49 
25  -> 49 
49  -> 49 
50  -> 99 
75  -> 99 
99  -> 99 
100  -> 149 
2138 -> 2149 
2150 -> 2199 
48.5 -> 49 
49.5 -> 99 
50.5 -> 99 
+0

はい、しかし悪名高いのはどうですか?49.5 ?? –

+0

@NickZiebert私がコメントを見るまで、私は実際の二重の価値を見たことはありませんでした。とにかく、私は自分の答えを更新しました。ありがとう。 –

0

次の方法は、所望の効果があります。

static int round_to_49(int i) { 
    return ((i+50)/50*50)-1; 
} 

例:* 2132

50: 99 
46: 49 
145: 149 
154: 199 
+1

でも '48.5'が' 99'を返していますか? –

+2

'int'で' Math.ceil() 'を呼び出すのはなぜですか? – shmosel

+0

@shmosel私の心は素晴らしいatmで働いていない;)私はそれを修正! –

関連する問題