我从excel表复制值8.03,并使用下面的代码从剪贴板中读取C#中的值。出来的值是8.0299999999999994而不是8.03。当我看下面的xml时,值为8.0299999999999994。 xlsx的zip文件中的sheet1.xml也具有值8.02999999999999994。但是当我将值复制到记事本时,该值将被复制到8.03。如果在记事本中将值复制为8.03,我该怎么办?
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>
答案 0 :(得分:1)
剪贴板支持多种格式。显然,XML Spreadsheet
格式对基础浮点值的舍入与excel不同。如果您想完全像记事本一样获取数据,请尝试获取text
表示。
当然,复制为text
无法获得XML Spreadsheet
为您提供的所有详细信息,但这一切都取决于您对数据的处理方式。
另一种方法是获得两种表示。获取XML Spreadsheet
格式以获取详细数据并使用text
格式获取显示字符串。