double型をint型にする方法とは?

このQ&Aのポイント
  • double型の数値をint型に変換する方法について教えてください。
  • double型の数値をint型に変換する際、四捨五入される方法としてキャスト演算子を使う方法がありますが、もっと簡単な方法はありますか?
  • 回答が来週になるかもしれませんが、お時間の許す範囲で教えていただけると幸いです。
回答を見る
  • ベストアンサー

数字の double 型 を int型 にする時

仮に double 型 の ある数字を 12.6 とします。 printf関数を使って .0f で表示する時は 小数点を四捨五入されて 、整数地が1繰り上がり13と表示されます。 ここである数字をキャスト演算子を使ってprintfで表示すると小数点を切り捨てられるので12と表示されます。 これはdouble型では 12.6 がはいっていて int型では12がはいっているから起こる現象ですね。 前置きは長く長くなりましたがdouble型で四捨五入される数字を、int型にした時に1繰り上げる簡単な方法はないものでしょうか?  double a = 12.6;  int b = ( int ) a;  if( a - ( double ) b  > 0.4444444444 ){   b++;  }  printf( "%d\n" , b ); こういう方法なら一応出来ない事はないですがもっと簡単な方法はありませんか? 後、私は時間が余りないので時間内に回答がなければ返信が来週になります。 申し訳ありません。 答えていただいた方はありがとうございます。

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

  • ベストアンサー
  • kmee
  • ベストアンサー率55% (1857/3366)
回答No.1

+0.5してからintにする。 常套手段です。 > if( a - ( double ) b  > 0.4444444444 ){ >= 0.5 でしょう。 これだと、 12.45 → 13 になります。 0.499999999 でも、誤差の関係で微妙です

mana5867
質問者

補足

なるほどそういう方法常套手段としてあるのですね 教えていただきありがとうございました 時間がなくて全員に返信できづにすみません 皆様ありがとうございました

その他の回答 (5)

  • hashioogi
  • ベストアンサー率25% (102/404)
回答No.6

四捨五入というか、まるめというか、目的によって使い分ける必要があります。 (1) 経済学的な分野では、負の値はマイナス方向に四捨五入した方が実感として良いと思います。 例えば、4.51万円の借金、つまりは-4.51万円は四捨五入によって-5万円にした方が-4万円にするよりも実感として良いわけです。 (2) 画像処理のような分野では、見た目が自然になる方が良いわけです。 例えば、x1=4.5とx2=-4.5の距離は実際には4.5-(-4.5)=9.0です。でも四捨五入によってx1=5、x2=-5にしてしまうと、計算上5-(-5)=10になってしまいます。この場合は-4.5は四捨五入によって-4にした方が距離は保たれて見た目に自然な結果になります。つまりこの場合はプラス方向に四捨五入することになります。 従って負の値をプラス、マイナスのどちら方向に四捨五入するかは分野によって使い分ける必要が出てきます。

  • asuncion
  • ベストアンサー率33% (2126/6286)
回答No.5

>if( a - ( double ) b  > 0.4444444444 ){ なぜ0.4444444444を使っているのか根拠が不明です。 根本的な解決策になっていません。

  • jacta
  • ベストアンサー率26% (845/3158)
回答No.4

四捨五入にはround関数を使います。

  • yama5140
  • ベストアンサー率54% (136/250)
回答No.3

double 型のある数字が、 正のときは、+0.5 してから int にキャストする。 負のときは、-0.5 してから int にキャストする。 a += ( a < 0.0 ) ? -0.5 : 0.5; printf( "%d\n", (int)a );

  • maiko0318
  • ベストアンサー率21% (1483/6970)
回答No.2

四捨五入は (int)(a+0.5) でいいですよ。

関連するQ&A

  • 四捨五入で計算された数字を、整数で返す関数を教えてください。

    エクセルで見積金額をだす時に、小数点以下非表示で計算すれば、100.4+100.9+100.4=301.7 302となります。 関数を使い小数点第1位四捨五入で、これを301にしたいのです。 小数点第一位を四捨五入して整数で返すと言うのでしょうか? (小数以下斬り捨てだと、300になります。INT関数がそうなのでしょうか?) すみません、関数がまだ良く分かりません。間違っていたり説明がまずかったなら、ごめんなさい。

  • エクセルで計算して、例えば小数点第2位まで求めると1.36になった数字

    エクセルで計算して、例えば小数点第2位まで求めると1.36になった数字を 小数点第1位で表示すると四捨五入で1.4となったとします。この数字に1000を 掛けると1360と表示されます。表示されている1.4に1000を掛けるということで 1400と表示するにはどのような関数を使用するのですか。 よろしくお願いします。

  • (int)/(int)=(double)にする方法

    (int)/(int)=(double)にする方法を教えて下さい。 例えば、 int a, b; double c; a=1; b=2; c=a/b; とすると、cとして0が計算されますよね。 0でなく0.5と計算させる方法をご存知の方教えて下さい。 ちなみに、a,bを最初の宣言の時点でdouble型にすることはできません。 よろしくお願いいたします。

  • excelの計算の仕方

    大変初歩的な質問なのですが・・・ excelで計算式の入力で、まず、A1のセルにに=3*1.8と入力するとします。小数点以下を0桁にすると、四捨五入されて、5と表示されると思います。 次に、B1に=A1*2.3と入力し、小数点以下を1桁にすると12.4になると思います。 でも・・・ この計算だと、B1のセルは、5*2.3ではなくて5.4*2.3になりますよね? ここで、5*2.3にしたい時は、B1にどういう計算式を入れたら良いのでしょうか? または、A1の数字を四捨五入前の数字で計算するのではなく、表示されている数字を固定(?)する方法とかないでしょうか? 大変わかりにくい説明で申し訳ありませんが、理解できて良い方法が思い当たる方は、教えてください。 よろしくお願いします。

  • エクセルで有効桁を指定して丸める

    以前、↓↓にて http://oshiete1.goo.ne.jp/qa1345491.html 「excelで普通に四捨五入をするとなると  『ROUND』などで小数点以下の桁数を指定しますよね。  そうではなく、有効桁数3桁で四捨五入…例えば、  0.1234ならば0.123  1.234ならば1.23  12.34ならば12.3  123.4ならば123…のように  数字を四捨五入させる関数(?)はあるのでしょうか。」 と質問し、 =ROUND(A1,-INT(LOG(A1))-1 + 3) とか =VALUE(TEXT(A1,"0.00E+00")) といった方法を教えていただいたのですが、 0.1234 なら 0.123 ・・・ 123.4 なら 123 までは同じなのですが、 1234.5 なら 1230ではなく1235 12345.6 なら 12300ではなく12346 つまり、1000未満の場合は以前と同じく有効数字3桁で 1000以上の場合は小数点以下四捨五入としたい場合は、 IF関数で =IF(1000>A1 ・・・のように条件指定してやるしかないのでしょうか。 (A1の部分にも長々した数式が入るもので) 数式がかなり長くなってしまい、見づらいので なにか良い方法があればと思ったのですが…

  • エクセルで有効数字、四捨五入、未満表示をする方法

    同じような、質問がいくつかあったのですが、よくわからず質問させていただきます。 よろしくお願いします。 有効数字を2桁にし、四捨五入をする方法は、ここで調べて =ROUND(A1,1-INT(LOGA1)) とわかったのですが、これをさらに未満表示を加えるとどうすればいいのでしょうか? 有効数字を2桁、3桁目を四捨五入する。1未満なら、1未満(-でも1未満)と表示する。 すいませんがよろしくお願いします。

  • round関数について

    試しにエクセルで次の計算をしてみてください。 -16.76 7.9 -11.45 -8.88 -1 4.26 33.78 以上を全部足します。つまり「=sum(a1:a7)」です。当然「7.85」になります。 次に四捨五入します。round関数で小数点第2位を四捨五入して、第1位まで表示させます。つまり、「=round(sum(a1:a7),1)」ということです。すると「7.8」を返しました。 ん?「7.9」なのでは?と思い、次にこんな計算をしてみました。 A・・・=round(sum(a1:a7),2) B・・・=round(A,1) つまり、Aでいったん小数点第3位を四捨五入させた上で、その値を今度はBで小数点第2位を四捨五入させ、最終的に小数点第1位まで表示させたわけです。すると、ちゃんと「7.9」を返しました。 なんでこんな風になるのでしょうか?どうして一発で「7.9」にならないのでしょうか?

  • 化学での有効数字について(途中計算)

     以下についてアドバイスいただけると助かります。  有効数字について  和・差について・・・小数点以下の桁数が少ない方に合わせる  積・商について・・・桁数が少ない方に合わせる  については、分かったのですが、有効数字3桁での指定があるときに  19.1、24.5889、0.12553、3.2952の4つの数にたいして  ○和を筆算で求める場合    小数第1位に合わせるために、    19.1→19.10(小数第2位表示)    24.5889→24.58(小数第3位切り捨て)    0.12553→0.12(小数第3位切り捨て)    3.2952→3.29(小数第3位切り捨て)  として和を求め、小数第1位(小数第2位四捨五入)にする  ○積を筆算で求める場合    有効数字3桁に合わせるために、    19.1→19.10(有効数字4桁表示)    24.5889→24.58(5桁目切り捨て)    0.12553→0.1255(5桁目切り捨て)    3.2952→3.295(5桁目切り捨て)  として積を求め、有効数字を3桁(4桁目は四捨五入)にする  と思っています。  1.このやり方で大学受験では問題ないのでしょうか。    特に気になっているのは、計算をする前の丸め方(すべて切り捨てにしているところ)です。  2.計算ステップがいくつもあり、一度に計算ができない場合、そのステップ毎に得られる数の    丸め方は切り捨て・四捨五入のどちらがよいのでしょうか。  よろしくお願いします。    

  • エクセル関数?教えてください。これはどうすればできますか?未熟者です

    A列÷B列の答えの数値を削除と四捨五入し、プラス表示とマイナス表示をしたい。 答えは2パターンになります。 (1)A列÷B列の答え1.091763・・・などとなります。それを小数点一位以上(1.9)を削除し小数点五位(6)を四捨五入して数値で表したいのです。 そして出た答え、小数点以上が(1.)の場合プラス表示とし918で完成させたい。 (2)A列÷B列の答え0.991763・・・などとなります。それを小数点一位以上(0.9)を削除し小数点五位(6)を四捨五入して数値で表したいのです。 そして出た答え、小数点以下(0.)の場合はマイナス表示としと-918で完成です。 うまく説明できませんが、よろしくお願いします。

  • エクセル2010 小数点を切り捨てたい!

    少し前に同じ質問をしたのですが、ミスがあったのでもう一度投稿します。すみません、、 A1に2.54という数字があるとしたらB1に2.5を入れたいです。小数点第2は四捨五入します。 四捨五入した数字を使ってまた別の計算をしたいのですが、このときに2.54ではなく2.5の数字を使います。なので、四捨五入した数字を表示するだけではなく2.5という数字に変えたいです。 C1に2.5があったら、B1+C1=5.0となるようにしたいです。 できれば数式を入力して解決したいですが、超簡単なマクロでしたらわかりますのでマクロでも問題ありません。もし初心者には理解が難しいマクロでしたら簡単な解説をつけていただけると超助かります。 またマクロで回答いただいた場合はいろいろと質問させていただくかもしれませんがよろしくお願いします。

専門家に質問してみよう