Excelの、「1.333」「1.225」「-1.333」「-1.225」といった値の計算結果について、以下のような記事を書いてきました。
そもそもxlsxファイルの内部で、これらのデータはどうなっているのでしょうか。
確認するワークシート
A1:A4セルに「1.333」「1.225」「-1.333」「-1.225」を入力し、
A5セルには「0」になる計算式
=A1+A2+A3+A4
を、
A6セルには演算誤差の表示される計算式
=(A1+A2+A3+A4)
を入力した、下図のようなSheet1シートを作成し、Book1.xlsxとして保存しました。
sheet1.xmlファイル内のデータ
Book1.xlsxの拡張子をzipに変更後、展開(解凍)を行い、xlフォルダー下のworksheetsフォルダー内にあるsheet1.xmlファイルが、上記の操作で作成したSheet1シートのデータを管理しているファイルです。
そのA1:A6セルの中身は、下図のような状態になっていました。
興味深いのは「1.225」を入力したA2セルと、「-1.225」を入力したA4セルです。
小数第16位に「1」の存在する、
「1.2250000000000001」
「-1.2250000000000001」
になっています。
「1.225」「-1.225」と入力したにもかかわらず。
Excel上は「1.2250000000000001」にならない
先ほどのBook1.xlsxファイルのSheet1シートで、A1:A4セルの小数点以下を18桁まで表示させても、下図のように「1.2250000000000001」的な値が表示されることはありません。
VBEで「1.2250000000000001」と「1.225」を比較する
この「1.2250000000000001」が「1.225」と等しいかを、VBEのイミディエイトウィンドウで確認すると、Trueと判定されます。
「1.2250000000000001」より少しだけ大きい「1.2250000000000002」が「1.225」と等しいかを確認した場合には、Falseと判定されます。
- Googleスプレッドシートで作成したxlsxファイルの場合「1.225」は「1.225」
- OpenPyXLで「1.2250000000000001」を読み込んでも「1.225」
- xlsxファイル内部で小数第16位まで保持しているのは「1.225」だけではない
最終更新日時:2024-01-18 09:36
- Newer:Googleスプレッドシートで作成したxlsxファイルの場合「1.225」は「1.225」
- Older:WorksheetFunction.Sumで「1.333」「1.225」「-1.333」「-1.225」の入力されているセルを合計すると…
Home » Excel(エクセル)の使い方 » xlsx内部のxmlで「1.225」は「1.2250000000000001」