2016-03-26 3 views
0

ダブルを追加するプログラムがありますが、0以外の正確な数を表示するようにしたいと思います。たとえば、私は13.4と10.05を追加しました。 23.450000と表示されます。どうすれば%.2lfを使わずに23.45を表示するようにするのですか? 12.4と10.1を追加すると22.50が表示されますが、22.5のみを表示する必要があるため、%.2lfを使用することはできません。悪い英語のために申し訳ありません。Cで倍精度のゼロを使わないで正確に丸める方法

+0

"*それは*"何を使用する手段であることを示している? 'printf()'? – alk

+0

「22.5」は「22.50」と同じではなく、例えば「22.5」は「22.49」や「22.51」のように丸められます。したがって、実際に '22.50'を持つと' 22.5'が表示されて精度が失われます( "情報")。 22.50の場合はなぜ '22.5'を表示するのですか? – alk

+0

なぜ '%.2lf'フォーマットを避けたいですか? – Peter

答えて

0

完全な解決策ではありませんが、問題をどのように進めるかについてのヒントがあります。

あなたが望むのは、入力数字の小数点以下の桁数を最初に数えることで達成できます。これは、出力に必要な小数点桁数を決定します。明らかに、それはあなたがあなたの数字の文字列表現を持っている場合にのみ働くでしょう。

/* necessary casts removed for clarity */ 
int fractionalDigs1 = arg1 + strlen(arg1) - strchr (arg1, '.') - 1; 
int fractionalDigs2 = arg2 + strlen(arg2) - strchr (arg2, '.') - 1; 

2つの数の追加のために、あなたは出力小数の桁が乗算に、合計2つの入力引数の画分の最大値をカウントしたいでしょう - あなたが決めます。

int fractionalDigsOut = max (fractionalDigs1, fractionalDigs2); 

非定数フィールド幅はそれほどのようなフィールド幅書式指定子*と連携して出力(*は、引数リストから引数を取り、フィールド幅としてそれを使用しています):

printf ("%8.*f", fractionalDigitsOut, num); 
関連する問題