7

重複の可能性:
小数点以下の有効数字を2桁から2桁に丸めます

私は小数度(23.1248)を分スタイル度(23 7'29.3 ")に変換しようとしています。これは私がこれまでに持っているものです:

   double a=23.1248;
   int deg=(int)a;//gives me the degree
   float b=(float) (a-deg);
   int min=(int) (b*60);//gives me the minutes
   double sec= (double) ((c*60)-min);//gives me my seconds

すべて正常に動作しますが、秒を最も近い10分の1または100分の1に切り上げたいと思います。10進数のフォーマットを見てきましたが、文字列にキャストしたくありません。私もbigdecimalを見てきましたが、それが役に立たないと思います。

4

2 に答える 2

16

Math.round(double)数値を拡大してから縮小してから、数値を使用してみてください。

double x = 1.234;
double y = Math.round(x * 100.0) / 100.0; // => 1.23

BigDecimalあなたが本当にヘビー級になりたい場合にも使用できます:

BigDecimal a = new BigDecimal("1.234");
BigDecimal b = a.setScale(2, RoundingMode.DOWN); // => BigDecimal("1.23")
于 2012-01-11T19:21:37.283 に答える
0

まず、これを行うためのライブラリ関数があるので、それらを使用してみませんか?Math.round()を参照してください。車輪の再発明をする必要はありません。ただし、必要に応じて、次のことを試すことができます。ダブルを100分の1に丸めるには:

x = 0.01 * floor(x * 100.0)

ダブルを10位に丸めるには:

x = 0.1 * floor(x * 10.0)

ダブルを10^kの場所に丸めるには:

x = 10^k * floor(x / 10^k)

Javaを含むすべての言語での実装は簡単でなければなりません。これに伴う問題は、それが実際には丸められないが、あなたの位置に切り捨てられることです。これを修正するには、丸める前に、数値に0.5 * 10^kを追加するだけです。切り上げたい場合は、上記のバージョンを使用し、計算の前後に10^kを追加します。

于 2012-01-11T19:19:54.443 に答える