整数+少数の値の表示が少し変わる

フォーラム(掲示板)ルール
フォーラム(掲示板)ルールはこちら  ※コードを貼り付ける場合は [code][/code] で囲って下さい。詳しくはこちら

トピックに返信する


答えを正確にご入力ください。答えられるかどうかでスパムボットか否かを判定します。

BBCode: ON
[img]: ON
[flash]: OFF
[url]: ON
スマイリー: OFF

トピックのレビュー
   

展開ビュー トピックのレビュー: 整数+少数の値の表示が少し変わる

Re: 整数+少数の値の表示が少し変わる

#3

by みけCAT » 8年前

初めたての人 さんが書きました:この最後の1が付くのはなぜですか?
一般的な浮動小数点数(IEEE754)では小数を2進数で表現するので、10進数では有限小数の値でも2進数では無限小数になり、丸め誤差が生じることがあるためです。
初めたての人 さんが書きました:また解決の仕方はありますか?
この場合は、64ビットIEEE754の浮動小数点数は10進数で15桁程度の制度があるので、double型を使えば改善するかもしれません。
※double型が64ビットIEEE754の浮動小数点数とは限りません
もしくは、元の値をそのまま保持することが重要であれば、そもそも浮動小数点数に変換せず文字列のまま処理するといいでしょう。

Re: 整数+少数の値の表示が少し変わる

#2

by 白い変人 » 8年前

それは、浮動小数点を処理する上での誤差と考えるべきでしょう。

何処までを有効数字とするのかは、質問者様次第な部分がありますが、

printf("入力した整数は%fです\n", a);

のところを、

printf("入力した整数は%1.3fです\n", a);

という具合にでもしておけば、小数第3位までで綺麗に表示出来ると思われます。

実際のところ、この記述には、コンパイラ毎のローカルルールが有ったりする場合がありますので、注意が必要な場合もあります。

整数+少数の値の表示が少し変わる

#1

by 初めたての人 » 8年前

コード:

#include < stdio.h >
void main()
{
	float a;
	printf("小数を入力してください:");
	scanf_s("%f", &a); 

	printf("入力した整数は%fです\n", a);
}
これを実行しaに例えば123.456を代入すると123.456001と表示されます。
この最後の1が付くのはなぜですか?また解決の仕方はありますか?

ページトップ