筆者が過去にやってしまったバグを基に作成したデータ設定のバグの例を示します(リスト1、リスト2)。
/* 円の面積を求めるプログラム CircleArea.c */ #include <stdio.h> int main(void) { //各変数の宣言 float radius = 3; //半径 float pi = 3.14E+00; //円周率 float CircleArea = 0.0; //円の面積 //円の面積を算出する(半径*半径*π) CircleArea = radius * radius * pi; //円の面積 //結果を表示する printf("円の面積 = %f", CircleArea); return 0; }
リスト1は、円の面積を求めるプログラムで、リスト2はプログラムにハードコードするデータです。筆者は以下の順番でデータをプログラムに入力しました。
面積の計算結果が不一致の原因は、Excelにありました。リスト2の画像の最上部にある細かい数字をよく確認すると、「3.141591」となっていることが分かるでしょう(リスト2を拡大して再掲)。これが、C3のセルの実際の値です。
セルのC3を見ると、「3.14E+00」となっています。これは、セルの書式設定が指数形式で小数点以下の桁数が2桁になっているためです(画面1)。
筆者は、リスト2のセルからコピーしたので、値は間違えていないと思い込んだのですが、指数形式でコピーをすると、テキストエディタには、表示桁数のみをコピーする仕様となっています。よって、表示桁以下の値が間違っていることに気づきませんでした。実際に確認してみましょう(リスト3)。
リスト3は、Excelのセルからテキストエディタへコピーした時の結果を示したものです。1、2行目はともに「3.141591」を入力しています。ただし、1行目のセルの書式設定は指数で小数点以下の桁数は2桁にし、2行目は標準の状態です。
1行目をコピーすると、「3.141591」ではなく「3.14E+00」となりました。2行目は「3.141591」がそのまま貼り付けられました。つまり、Excelの指数表記をコピーすると、セルの内部の値ではなく画面の最上段の値をコピーします。結果として、本来「3.141591」で計算するところを3.14として計算し、結果が一致しなくなりました。正しくは、セル書式を標準とするか、桁数を変えてからコピーするべきでした。
Copyright © ITmedia, Inc. All Rights Reserved.