2012-04-24 2 views
0

Я копирую значение 8.03 с листа excel и считывая это значение в C# из буфера обмена, используя следующий код. Значение, которое выходит, составляет 8.0299999999999994, а не 8.03. Когда я смотрю на xml, как ниже, значение равно 8.0299999999999994. Файл sheet1.xml, который находится в zip-файле xlsx, также имеет значение 8.02999999999999994. Но когда я копирую значение в блокнот, значение копируется в 8.03. Что я могу сделать, чтобы скопировать значение как 8.03, как в блокноте?Чтение скопированного десятичного значения из excel

DataObject retrievedData = Clipboard.GetDataObject() as DataObject; 
    if (retrievedData.GetDataPresent("XML Spreadsheet")) 
    { 
     var sourceDataReader = new XmlTextReader(retrievedData.GetData("XML Spreadsheet") as System.IO.Stream); 
     var doc = XDocument.Load(reader); 
     var excelWorksheeet = doc.Element("Worksheet"); 
     XNamespace ns = "urn:schemas-microsoft-com:office:spreadsheet"; 
     XName worksheetName = ns + "Worksheet"; 
     var worksheetElement = doc.Root.Element(worksheetName); 
    } 

worksheetElement имеет значение:

<Worksheet ss:Name="Sheet1" xmlns:ss="urn:schemas-microsoft-com:office:spreadsheet" xmlns="urn:schemas-microsoft-com:office:spreadsheet"> 
    <Table ss:ExpandedColumnCount="1" ss:ExpandedRowCount="1" ss:DefaultRowHeight="15"> 
    <Row> 
     <Cell> 
     <Data ss:Type="Number">8.0299999999999994</Data> 
     </Cell> 
     </Row> 
    </Table> 
    </Worksheet> 
+6

[Что каждый компьютерный ученый должен знать о арифметике с плавающей точкой] (http://docs.oracle.com/cd/E19957-01/806-3568/ncg_goldberg.html) –

ответ

1

Буфер обмена имеет поддержку нескольких форматов. Очевидно, что формат XML Spreadsheet выполняет различное округление базового значения float, чем это делает excel. Если вы хотите получить данные точно так же, как и блокнот, попробуйте вместо этого получить представление text.

Конечно, копия как text не получит всю подробную информацию, которую дает XML Spreadsheet, но все зависит от того, что вы хотите делать с данными.

Альтернативой является получение обоих представлений. Получите формат XML Spreadsheet, чтобы получить подробные данные и использовать формат text, чтобы получить строку отображения.

Смежные вопросы