プロが教えるわが家の防犯対策術!

例えば、
左↓の分を表す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 (時間)
-----------------------------

A 回答 (8件)

double型変数 = Math.round(int型変数 / 6.0) / 10.0;


とすればとりあえずはできます。
6.0で割ってからさらに10.0で割っているのは、まるめの対応です。
    • good
    • 0

No.7の方につけたしですが、


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

数値をフォーマット出力する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 …
    • good
    • 0

#3の補足です。


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

こんばんは



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 ;

この回答への補足

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

補足日時:2003/06/16 21:06
    • good
    • 0

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)

この回答への補足

教えていただいた方法でやってみると、
結果が以下のようになったのですが↓
-----------------------
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  (時間)
-----------------------

こうではなく、できれば質問で書いたように、四捨五入したいのですが
そんなのって無理なのでしょうか・・?

補足日時:2003/06/16 21:04
    • good
    • 0

普通に分を60で割るのはだめですか?



120 / 60.0とすれば答えがReal型?float型?(あいまい。。でも、小数点を扱えるやつです。。)で出て来るのでこれといった変換は必要ないと思いますよ。

60.0にするところがポイントです。ここで60としてしまうと答えはint型になってしまい、小数点は扱えません。
    • good
    • 0

何を使って計算しているのかよくわからないので、使える関数もよくわかりませんが、


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

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!