C# 两个十进制浮点数在单元格中变为许多小数

C# 两个十进制浮点数在单元格中变为许多小数,c#,excel,floating-point,epplus,namevaluecollection,C#,Excel,Floating Point,Epplus,Namevaluecollection,我在NameValueCollection中有一个值,即.22。该值被加载到浮点值中 在debug中将该值写入Excel时,该值为fValue=0.22 InvoiceWs.Cells["I" + iRow.ToString()].Style.Numberformat.Format = "$#,##0.00"; fValue = float.Parse(nvcUnitPrice["LG3000"].ToString()); InvoiceWs.Cells["I" + iRow.ToString(

我在NameValueCollection中有一个值,即.22。该值被加载到浮点值中

在debug中将该值写入Excel时,该值为fValue=0.22

InvoiceWs.Cells["I" + iRow.ToString()].Style.Numberformat.Format = "$#,##0.00";
fValue = float.Parse(nvcUnitPrice["LG3000"].ToString());
InvoiceWs.Cells["I" + iRow.ToString()].Value = fValue;
当我打开Excel文件时,我看到该值为0.2199998807907,我无法确定发生了什么。有什么想法吗


浮点数只有一定的精度。可以表示的最接近0.22的数字是您在表中看到的数字。您最好的选择是使用不同的类型,例如decimal for fValue,这样就不会出现这种不精确的情况


编辑:如果您输入0.22,您可以看到我的意思。

因为您处理的是价格,所以应该使用十进制类型。来自msdn。很高兴为您提供帮助

为什么不使用十进制表示价格呢。您可以使用字符串进行赋值,而不是解析要浮动的值吗?@vbouk。。成功了。非常感谢。马丁如果我使用这个字符串,它会将字符串写入Excel,然后它会说有一个数字存储为字符串,不能用于计算。+1感谢您提供的有关浮动的信息。在我再次尝试使用它们之前,需要对它们进行研究。在研究时,我读到一些问题可能来自围绕IEEE754设计的Excel。谢谢你的信息。