String.format 货币总和四舍五入问题

String.format currency sum rounding issues

所以我检查了 Format currency without rounding 和其他一些帖子,但我不确定我是否在任何地方找到我的特定错误。

查看

@foreach (var item in attyData)
{
    <tr>
        <td>@String.Format("{0:C0}", item.cashMoney)</td>
    </tr>
}                
<tr class="info">   
    <td>@String.Format("{0:C0}", Model.attyData.Sum(item => item.cashMoney))</td>                    
</tr>

cashMoney 的数据库结果

12.2
13.3

查看结果




Total Line - 

如何让我的个人总计线不四舍五入? cashMoney 的数据类型是 decimal?

您所看到的是正确的。 12.2和13.3的.Sum()为25.5,应用格式后四舍五入为26。

您要做的是在循环遍历 foreach 循环时求和:

@{ var total = 0; }

@foreach (var item in attyData)
{
    var cash = Math.Round(item.cashMoney);
    total += cash;
    <tr>
        <td>@String.Format("{0:C0}", cash)</td>
    </tr>
}                
<tr class="info">   
    <td>@String.Format("{0:C0}", total)</td>                    
</tr>

如果您不希望它四舍五入,请使用不同的 Currency ("C") Format Specifier

例如:

decimal a = 12.2M;
decimal b = 13.3M;

var sum = a + b;

Console.WriteLine($"C0 --- > {a,-8:C0} -- {b,-8:C0} -- {sum,-8:C0}");
Console.WriteLine($"C1 --- > {a,-8:C1} -- {b,-8:C1} -- {sum,-8:C1}");
Console.WriteLine($"C2 --- > {a,-8:C2} -- {b,-8:C2} -- {sum,-8:C2}");
Console.WriteLine($"C3 --- > {a,-8:C3} -- {b,-8:C3} -- {sum,-8:C3}");

输出如下:

C0 --- >       --       -- 
C1 --- > .2    -- .3    -- .5
C2 --- > .20   -- .30   -- .50
C3 --- > .200  -- .300  -- .500