• 締切済み

小数計算について

お世話になります。 以下の小数計算方法を教えてください。 時間取得を DWORD start,end; start = start = timeGetTime(); for(int i =0; i<100000; i++){ 何らかの処理; } end = timeGetTime(); int msec = end-start; 上記 msecを1000で割った場合、 小数になるのですが、その場合、小数の変数の型は 何になるのでしょうか? また、求めた小数を用いて、 INT型の変数÷求めた小数 = 小数値(小数第2位まで) を行いたいです。 例えば、 840000 / 64.9 = 12942.99 のような処理をしたいです。 どうぞよろしくお願い致します。

みんなの回答

  • php504
  • ベストアンサー率42% (926/2160)
回答No.2

訂正 2番目の質問はよく読まずに答えてしまいました 表示の問題だけならprintfのフォーマットで調整できます。 数字として少数第2位までほしいなら100倍してからceil( )なりfloor( )なりround( )なりしてまた100で割ります。

the-ai
質問者

お礼

回答ありがとうございます。 キャストでできました。 助かりました。

  • php504
  • ベストアンサー率42% (926/2160)
回答No.1

浮動小数点は float か double を使います double sec = (double)msec / 1000; 小数点2桁なら整数のまま10で割った後100で割ればいいのでは msec /= 10; double sec = (double)msec / 100;

関連するQ&A

  • 小数点を含む数値の切捨て

    数値の小数点以下を切捨てて変数に格納したいのですが いい方法はないものでしょうか? "123.456"なら"123"が取得できればOKです。 ちなみに要は小数点より前の数値が取れればということなので $Int = split(/./,"123.456",1) とsplit関数を試してみたんですが、変数$Intには なにも値が取得できてませんでした。 ("."を":"に変えたら取得できました。) 参考書等で色々調べてはみたんですが どうしてもわかりません。 お手数ですが、宜しくお願い致します。

    • ベストアンサー
    • Perl
  • double型で収まりきれない小数の値を求めたい。

    下記のようなプログラムを作っています。 int num = 1000; double d1 = 12345.6; double d2 = 0.0: for(int i=0;i<num;i++){   d2 += Math.pow(d1,(double)i); } d2の値を求めたいのですが、これをこのまま実行すると、得られる数値が大きすぎてd2の値がInfinityになってしまいます。 小数を格納できる最大の型はdouble型ですよね? それに収まりきらないということは、私の求めたい数値はJavaでは求めることが出来ないのでしょうか? それとも何かInfinityになってしまうのを回避する手段はあるのでしょうか? d2で得られた値はそのまま他の計算式で利用するのでどうしてもすべて小数値でなくてはならないのです。 どなたかお知恵をお貸しください。 よろしくお願いします!!

    • ベストアンサー
    • Java
  • 初期化

    はじめまして、質問お願い致します。 以下のソースでなぜ sum の変数を初期値を設定しないとエラーになるんでしょうか。 public static int getSum(int start, int end) { int sum = 0; for( int i = start; i <= end; i++) { sum = sum + i; } return sum ; }

  • DWORDの実際の型は何でしょうか

    VC++.NETの環境です。 DOWRD dw1 = 1; int i = 2; と定義し ここで if ( i > dw1 ){ 何かの処理; } とコーディングすると warning C4018: '>' : signed と unsigned の数値を比較しようとしました。 のワーニングがでます。 これは、DWORDがint型でなくunsigned int型のようにも見えます。 ある本によれば(VC++.V.NET逆引き大全500の極意) DWORD はint型であると記述されています。 もし、int型ならこのワーニングはでないはずなのですが、 なぜでるのでしょうか。又、DWORDの実際の型は何なのでしょうか。ご存じのかたおりましたら、教えていただけませんでしょうか。

  • String配列を扱うアルゴリズムについて

    よりパフォーマンスの良いアルゴリズムが、 ございましたらご教示下さい。 数レコード分のDBテーブルデータが格納されたString[][]型が存在するとします。 配列の要素は、String[行(フィールド)][列(カラム)]です。 ここで、全レコード中の列ごとの最大文字列長を int[]型に取得したいと思います。 そうした場合、自作した下記の処理よりも、 よいパフォーマンスを得られるアルゴリズムがございましたら、 ご教示願いたいと思います。 ※処理前提条件 ●String[][]型変数に、過不足無くテーブルデータが格納済みであるとします。 ●配列の第一(行)・第二(列)要素の最大値は取得済みであるとします。 ////////////// // 変数定義 // ////////////// String[][] tableData; ← テーブルデータ格納済み(過不足はありません) int 行数 = 全行数(取得済み); int 列数 = 全列数(取得済み); //列毎の最長文字列値を格納する。 int[] maxLen = new int[列数]; ////////// // 処理 // ////////// //列の個数分、処理を繰り返す for(int i = 0; i < 列数; i++) {   //行の個数分、処理を繰り返す   for(int j = 0; j < 行数; j++) {     //NULLを回避する     if(tableData[i][j] != null) {       //int配列に格納済みの数値より大きければ、改めて格納する       if(maxLen[i] < tableData[i][j].length()) {         maxLen[i] = tableData[i][j].length();       }     }   } } 以上です、どなかお知恵をお貸し頂けませんか。 宜しくお願い致します。

    • ベストアンサー
    • Java
  • 小数点以下の値を判断したいです

    DBから取得する値が3ならば3と、3.5なら3.5と取得したいです。 この時にint型で取得すると小数点以下が切られてしまいます。 double型で取得すると3.5は3.0となってしまいます。 どうしたらよいのでしょうか? 整数値であればintで小数値を含むならばdoubleで取得するようなロジックにしようかと思っているのですが、小数点以下の値を判別させる方法はありますでしょうか?

  • 小数点第2位の数値の計算

    下記のような処理があるとします。 Dim 変数1 As 宣言 Dim 変数2 As 宣言 Dim 変数3 As 宣言 Dim 変数4 As 宣言 変数1 = 0 変数2 = 0 変数3 = 0 変数4 = 0 変数1 = テキストボックス1.Text 変数2 = ラベル2.Caption 変数3 = ラベル3.Caption 変数4 = (変数2 + 変数3) - 変数1 ラベル4.Caption = 変数4 変数1~3には、小数点第2位までの 数値が入る事があるのですが、 例) 変数1 = 3.0 変数2 = 4.75 変数3 = 7.75 の場合、変数4 = 0 と計算される。 その場合、変数4の計算結果が 正しく出力されません。 宣言はDoubleを使うと計算結果は 16進数表示になり、Singleを使うと0になります。 正しい計算結果を出すには どのようにすれば良いでしょうか?

  • 小数を入力すると、処理が止まらない

    変数kyoriには整数を入力されることを想定しています。 なので、整数の場合は問題なく動くのですが、 小数を入力すると、 処理が止まらなくなるという現象が起こってしまいます。 このようなことはどのようにしたら 防ぐことが出ますか? --------------- main(void) { int kyori,untin; while(kyori != 0){ printf("距離を入力してください->"); scanf("%d", &kyori ); ・ ・処理 ・ 処理終了 ---------------

  • C言語の質問です

    C言語の質問です. DWORD の timeGetTime();でプログラムの実行時間を測ったら0だったのに CUT_SAFE_CALL(cutCreateTimer(&timer)); で取得すると時間が測れるってことありますか? timeGetTime();で取得した方は同じプログラムをfor文で何度か繰り返せばようやく違う値が返ってきます.これはやはりおかしいのでしょうか?

  • EXCELの小数計算について

    EXCEL97で小数計算をすると誤差がでるのですが何故ですか? A列に14.60を数値入力  B列に13.90を数値入力  C列に=B1-A1の数式をいれると-0.70となるはずなのにどういうわけか -0.699999999999999と表示される。 小数点以下14桁目までは-0.70000000000000と表示されるが15桁目で上記のように表示される。 表面上はROUND関数などで処理できるのですが複数の数式を組み合わせて計算している時は-0.69999・・・の数値をもって計算される場合があり誤差がでる。 消費税や金利計算などで1円でも誤差がでると表計算の正確さが問われてしまう。 0.7の他にも 次の場合もでる 0.2のとき0.1999・・ 0.3のとき0.2999・・・・ 0.8のとき0.7999・・・・ これはEXCELのバグなのでしょうか?

専門家に質問してみよう