Ключ в том, что Excel хранит числа как числа с плавающей запятой 2-го числа. Большинство десятичных дробей не могут быть представлены в виде чисел с плавающей запятой 2.
В некоторых ответах указано, что «0,58 не может быть представлено с плавающей запятой». Это неверно, так как 0.58 может быть представлен базовыми 10 числовыми типами с плавающей запятой, такими как тип .NET Decimal - конечно, это не приносит пользы, так как вы не можете изменить базовый тип, используемый для чисел в Excel.
Excel всегда отображает числа в строке формул, округленные до 15 значащих цифр точности. Таким образом, это число отображается как 0,58 в строке формул, даже если оно не «точно» 0,58 - и не может быть точно 0,58 из-за ограничений базового числового типа Excel.
Вы можете попробовать включить Точность, как показано (в Excel 2007 это можно найти в Параметры Excel -> Дополнительно -> При вычислении этой книги: -> Установить точность, как показано) - это может или не может заставить Excel округлять эту конкретную число при сохранении в XML, но это, по крайней мере, даст вам более последовательные результаты. Просто будьте осторожны, так как Precision As Displayed будет округлять числа, уже сохраненные в числовых ячейках (это не подлежит отмене), а также округлять результаты вычислений (эта часть не может быть отменена, поскольку ее отключение будет пересчитывать без округления). Отображаемая точность округляется в зависимости от числового формата, поэтому числовой формат «0,00» приведет к округлению до двух десятичных разрядов, но большинство десятичных дробей не могут быть представлены в системе счисления с основанием 2 в Excel, поэтому 0,58 все равно может дать вам то же самое вещь, когда написано в XML. Числа, отформатированные как «Общие», будут округлены до 15 значащих разрядов точности при включенном параметре «Точность как отображается».