質問: (D * (1 + (P*0.01) )); //税込価格 printf("%d\n",sum=(int)Z); //intへ型変換 double floor (double Z); //floorで小数点以下切り捨て printf("%.lf\n",Z); } ``` ### 試したこと 計算結果 入力 4916600 36 出力 6686575 6686576 ### 補足情報(言語/FW/ツール等のバージョンなど mac osX sierraのターミナルでgccコマンドを使ってコンパイルしました.
回答: まずはfloorの使い方を調べてみましょう。 前提として、関数内で引数の内容を変更し、呼び元がその内容を使いたいようなとき、つまり質問者さんの例では、 floor (double Z); と書いた時にZの内容を切り捨てした値にしたい(と思われる)訳ですが、 こういったときはポインタを使わねばなりません。 それは、floor関数の中でZをどんなにいじくってもmainで宣言したZはfloor関数に入る前の状態で変わらないからです(詳しくはポインタ、Call by value/ Call by reference 等を勉強なさってください)。 そう言うわけでmath.hの中を調べるまでもなく利用法を間違っているとわかるわけです。 というわけで、まず floor 関数はどう使えばいいのかお調べになるのがよろしいかと