当从包含小数的Excel单元格中读取值时,我遇到了以下问题:如果我在Excel单元格中输入9.95,则C#中的CellValue.InnerText
返回“9.9499999999999993”。
如何获取实际输入的值,即“9.95”,并知道试图获取这些值的代码事先不知道它是十进制数还是数字。
当从包含小数的Excel单元格中读取值时,我遇到了以下问题:如果我在Excel单元格中输入9.95,则C#中的CellValue.InnerText
返回“9.9499999999999993”。
如何获取实际输入的值,即“9.95”,并知道试图获取这些值的代码事先不知道它是十进制数还是数字。
Excel将值存储为双精度浮点数,因此许多时候您在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可以设计成存储您输入的确切值(通过将它们存储为十进制而不是浮点数),但算术运算速度会慢很多,因为所有计算都将在软件中而非硬件中进行。
.Text
? - Luis Ferrao由于Excel以浮点数存储,因此尝试从浮点数解析:
string curSep = System.Globalization.CultureInfo.CurrentCulture.NumberFormat.CurrencyDecimalSeparator;
string value = CellValue.InnerText.Replace(".", curSep);
value = value.Replace(",", curSep);
return float.Parse(value);
这个可以工作吗?