当从包含小数的Excel单元格读取值时,我遇到以下问题:如果我在Excel的单元格中输入9.95,则C#中的CellValue.InnerText
返回“9.9499999999999993”
如何获得输入的实际值,意思是“9.95”,知道试图获取这些值的代码不会提前知道它是小数还是数字。
答案 0 :(得分:4)
Excel将值存储为双精度floating point数字,因此您输入Excel的次数不能作为浮点精确存储。
如果您真的想知道Excel如何存储您的值,您可以将.xlsx扩展名更改为.zip,将其打开并在文件中查看。这是您单元格中存储的所有信息:
<sheetData>
<row r="1" spans="1:1" x14ac:dyDescent="0.3">
<c r="A1">
<v>9.9499999999999993</v>
</c>
</row>
</sheetData>
Excel可以设计为存储您输入的确切值(通过将它们存储为十进制而不是浮点数),但算术运算会慢很多,因为所有计算都是在软件而不是硬件中完成的。
答案 1 :(得分:1)
您无法检索为数字条目输入的实际值。我不相信它存储在任何地方。您看到的值是存储的值;您还可以检索显示的值(在VBA中它将是单元格的.Text属性),但我认为您无法获得输入的值。
该问题与以二进制表示某些十进制数的固有不可能性有关。
答案 2 :(得分:0)
由于excel以浮点形式存储,请尝试从float解析:
string curSep = System.Globalization.CultureInfo.CurrentCulture.NumberFormat.CurrencyDecimalSeparator;
string value = CellValue.InnerText.Replace(".", curSep);
value = value.Replace(",", curSep);
return float.Parse(value);
这有用吗?