• ベストアンサー

分を表す数値(int型)を、小数点に直したい

例えば、 左↓の分を表すint型数値の値を、 右↓のような小数点の形式に直す方法を教えて下さい。 どちらもint型で。 もし、int型で小数点が扱えないなら、最適な型で直したいのですが・・。 ※小数点以下の桁数は一桁です。 ----------------------------- 120 (分) → 2  (時間) 125 (分) → 2.1 (時間) 130 (分) → 2.2 (時間) 135 (分) → 2.3 (時間) 140 (分) → 2.3 (時間) 145 (分) → 2.4 (時間) 150 (分) → 2.5 (時間) 155 (分) → 2.6 (時間) 160 (分) → 2.7 (時間) 165 (分) → 2.7 (時間) 170 (分) → 2.8 (時間) 175 (分) → 2.9 (時間) 180 (分) → 3 (時間) -----------------------------

質問者が選んだベストアンサー

  • ベストアンサー
  • you111111
  • ベストアンサー率45% (20/44)
回答No.6

double型変数 = Math.round(int型変数 / 6.0) / 10.0; とすればとりあえずはできます。 6.0で割ってからさらに10.0で割っているのは、まるめの対応です。

すると、全ての回答が全文表示されます。

その他の回答 (7)

  • hilo256
  • ベストアンサー率18% (3/16)
回答No.8

No.7の方につけたしですが、 DecimalFormat("0.0"); とすると、 120 (分) → 2.0(時間) となってしまうので、 DecimalFormat("0.#"); としたほうがいいでしょう。

すると、全ての回答が全文表示されます。
回答No.7

数値をフォーマット出力するDecimalFormatクラスはいかがでしょう。 以下のプログラムを実行してみてください。 import java.text.DecimalFormat; (中 略) int i = 0; double d = 0.0; String s = null; DecimalFormat df = null; df = new DecimalFormat("0.0"); for ( i=120; i <=180 ; i++) {   d = (double)i / 60.0;   s = df.format(d);   System.out.println(     "[" + i + "]=>[" + s + "]"); } DecimalFormatについては、参考URLを参照してください。

参考URL:
http://java.sun.com/j2se/1.4/ja/docs/ja/api/java/text/DecimalFormat.html
すると、全ての回答が全文表示されます。
回答No.5

#3の補足です。 javaは割り切れるはずでも仕様上、丸め誤差がでてきてしまい、結果が2.999999・・・などのようになることがありうるので、小数点以下1桁で丸めています。 メソッドを使うのに、java.util.*などのimportを忘れないでください。

すると、全ての回答が全文表示されます。
  • arukamun
  • ベストアンサー率35% (842/2394)
回答No.4

こんばんは int型は整数型ですので、小数は表現できません。 また、上記の変換式はすごい変なんですけど、 ----------------------------- 120 (分) → 2  (時間) 126 (分) → 2.1 (時間) 132 (分) → 2.2 (時間) 138 (分) → 2.3 (時間) 144 (分) → 2.4 (時間) 150 (分) → 2.5 (時間) 156 (分) → 2.6 (時間) 162 (分) → 2.7 (時間) 168 (分) → 2.8 (時間) 174 (分) → 2.9 (時間) 180 (分) → 3  (時間) ----------------------------- であれば、分と時間が1対1になりましたよね。 double hour = (double)minute/60.0 ;

kawaen
質問者

補足

すみません、そういう風に変換したかったのです・・ 間違えてました。

すると、全ての回答が全文表示されます。
回答No.3

javaのカテゴリーなのでjavaで書きますが・・・ intは「整数」だと宣言しているので、小数は扱えません。 答えをdoubleなどで指定して、以下のように丸めるのがいいのではないでしょうか。 int minutes = 125; // 元の「分」です。 double hours = 0.0; // 答えの「x.x時間」です。 // ***** 小数点を丸めてフォーマット変換 ***** // DecimalFormat df = new DecimalFormat(); df.setMaximumFractionDigits(1); df.setMinimumFractionDigits(1); hours=df.format(minutes/60)

kawaen
質問者

補足

教えていただいた方法でやってみると、 結果が以下のようになったのですが↓ ----------------------- 120 (分) → 2.0  (時間) 125 (分) → 2.0  (時間) 130 (分) → 2.0  (時間) 135 (分) → 2.0  (時間) 140 (分) → 2.0  (時間) 145 (分) → 2.0  (時間) 150 (分) → 2.0  (時間) 155 (分) → 2.0  (時間) 160 (分) → 2.0  (時間) 165 (分) → 2.0  (時間) 170 (分) → 2.0  (時間) 175 (分) → 2.0  (時間) 180 (分) → 3.0  (時間) ----------------------- こうではなく、できれば質問で書いたように、四捨五入したいのですが そんなのって無理なのでしょうか・・?

すると、全ての回答が全文表示されます。
noname#9262
noname#9262
回答No.2

普通に分を60で割るのはだめですか? 120 / 60.0とすれば答えがReal型?float型?(あいまい。。でも、小数点を扱えるやつです。。)で出て来るのでこれといった変換は必要ないと思いますよ。 60.0にするところがポイントです。ここで60としてしまうと答えはint型になってしまい、小数点は扱えません。

すると、全ての回答が全文表示されます。
  • yomo3
  • ベストアンサー率32% (88/269)
回答No.1

何を使って計算しているのかよくわからないので、使える関数もよくわかりませんが、 エクセルならば =ROUND([分]/60,1) となります。 round関数は四捨五入の関数です。1つ目の引数が丸める値、2つ目の引数は丸めた後の小数点以下の桁数です。 round関数が使えない環境では、整数化関数intを使って、 =int([分]/6+0.5)/10 とすればいいでしょう。

すると、全ての回答が全文表示されます。