Excel 2007 を使用してドキュメントを XML スプレッドシート 2003 形式で保存すると、奇妙な問題が発生します。
「0.58」などの数値をランダムに「0.57999999999999996」に変更するようです。
本当に奇妙なのは、Excel を使用しているときにこの問題を確認できないことです。これは、XML データをテキスト エディターから直接表示した場合にのみ確認できます。
誰もこれに遭遇したことがありますか?もしそうなら、何らかの修正または回避策はありますか?
Excel 2007 を使用してドキュメントを XML スプレッドシート 2003 形式で保存すると、奇妙な問題が発生します。
「0.58」などの数値をランダムに「0.57999999999999996」に変更するようです。
本当に奇妙なのは、Excel を使用しているときにこの問題を確認できないことです。これは、XML データをテキスト エディターから直接表示した場合にのみ確認できます。
誰もこれに遭遇したことがありますか?もしそうなら、何らかの修正または回避策はありますか?
Excel は、数値データを浮動小数点として格納します。小数点以下の数字 (小数部分) は概算です。回避策はありません。0.58 は、正確に 0.58 である浮動小数点数として表すことはできません。
その時点で XML ファイルをロードするときは、数値を浮動小数点に戻すか、できれば固定桁の 10 進クラス (例: C# の Decimal) に変換する必要があります。
数値 0.58 は、0.57999999999999996 と同じ数値です。つまり、差は 0、またはさらに別の言い方をすれば、数値は等しいです。
「通常の」高校数学を使用している場合は、同意しないかもしれません。Excel はそうではなく、一般のコンピューターもそうではありません。それらは有限のビットセットを使用します。バイナリでの 0.58 の正確な表現は、無限のビット セットを使用するため、それらのビットの一部が失われます。