Articles
ドルからセントに変換する
On 2月 14, 2021 by adminラウンド関数を使用してドルからセントに変換しようとしていますが、ラウンド関数には何かがあると思います。 floatからintに100を掛けると、10進数が得られないため、誤解されています。これは問題のコードです
#include <stdio.h> #include <cs50.h> #include <math.h> int main(void) { int owed = 0; printf("Enter the owed amount: "); do { owed = GetFloat(); } while (owed < 0); owed = owed * 100.0; float owe = roundf(owed); owe = (int)owe;
コメント
- i wasn '丸める方法がわからないroundf()ではなくround()を使用していたので説明してください
回答
主な問題は、最初に取得した値をどのように保存するかです。 GetFloat()
を呼び出し、結果をint型の変数であるowed
に格納します。 GetFloat()は浮動小数点数を返します。これは、owedに格納しようとすると、暗黙的にintとしてキャストされます。その過程で、小数点部分は切り捨てられます。つまり、4.85を終日格納しようとすると、常に整数4として格納されます。
GetFloat()から返された値は、intではなくfloatvarに格納する必要があります。後で、100を掛けて丸め、次にそれをintに格納します。
補足として、最後の数行は機能しますが、 、ひどくきれいではありません。新しいfloatを作成して、別のfloatとなるはずのものを変更して結果を格納し、次の行でfloatをintにキャストして、intをfloatに格納します。フロートを丸めて同じフロートに格納しますが、次の行でフロートをintとしてキャストし、新しいint変数に格納します。または、すべてを1行で実行する方が簡単です。 int change = roundf(dollars*100);
これで質問に答える場合は、チェックマークをクリックして同意してください。フォーラムのメンテナンスを続けましょう。 😉
コメント
- どうすればそれを見逃すことができますか?どうもありがとうございます。ラウンド関数を3時間いじった後、私のコードはひどいものに見えました。'このようなばかげた間違いを犯す可能性があるとは信じられません;)
- これは私が非常にうるさいのかもしれませんが、暗黙のキャストを避け、常に明示的なキャストを使用する必要がありますコンパイラーだけでなく、将来のプログラマーにとっても、実際に何をしようとしているのかがはるかに明確になります。それは第二の性質であり、多くの頭痛の種を救う(そしてはるかに良いコードを作る)ので、プログラミングの早い段階に入るのは非常に良い習慣です。 int change =(int)(roundf(dollars * 100));
コメントを残す