导出到excel时,Math.Round()无法正常工作

时间:2012-09-12 09:51:47

标签: asp.net-mvc-3 excel razor

在我导出到excel的视图中,我显示了此变量的值

VeryGoodPercentage = subQst.Question.ReponseList.Where(
            r => r.ReponseValeur == 4 &&
            Model.SelectedGroupContactList.Select(c => c.ContaId).Contains(r.ContaId.Value)
            ).ToList().Count() * 100
            /
            denominator;

我以这种方式显示

<td class=xl76 align=right width=69 style='width:52pt'>@Math.Round(VeryGoodPercentage)%</td>

当我显示视图而不导出到excel时,一切正常。但是当我打开导出的Excel文件时,我发现该变量的值没有舍入。

对于考试:

在视图中:36%

在excel文件中:0.36

我用这一行来生成文件:

Response.AddHeader("Content-Type", "application/vnd.ms-excel");   

2 个答案:

答案 0 :(得分:0)

如上所述:

36%和0.36应该是相同的 - 只是excel并没有将这个百分比作为一个百分比或确实将36作为百分比解释 - 这将导致0.36作为一个数字。

我没有看到这是一个舍入问题,它是格式化或输入或两者兼而有之。

取决于@Math.Round(VeryGoodPercentage)生成的值 - 0.xx或XX.XX - 带有%符号或不带,excel将以不同的方式解释。

一些例子:

= 0.36将导致数量为0.36

= 36将导致数量为36

到目前为止,没有惊喜,但现在:

= 0.36%将导致0.0036

= 36%将导致0.36

但那些是Formulars,现在如果你只是在一个空的'默认'格式化单元格上使用F2并写入它:

36% - &gt;您可以将其格式化为百分比,将其显示为36%,但如果您将其格式化为“默认”,那么它将是数字0.36!

0.36% - &gt;会表现得像36%

希望这清除的不仅仅是它让人困惑;)祝你好运!

编辑:并使这更加模糊,在我的国家/地区.是thounsands的符号,因此您必须使用,代替。

使用VBA

编辑:您可以设置您的列或单元格以使用如下特定数字格式:

Table1.Columns("A").NumberFormat = "0.00%"

答案 1 :(得分:0)

我终于在这里找到了解决方案

Format HTML table cell so that Excel formats as text?

只需将此css参数添加到标记:

mso-number-format:Percent;