String.format货币汇总问题

时间:2016-07-29 16:53:58

标签: c# rounding truncate

所以我检查了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

查看结果

$12
$13

Total Line - $26

如何让我的个人总线不圆? cashMoney的数据类型为decimal?

2 个答案:

答案 0 :(得分:2)

您所看到的是正确的。 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>

答案 1 :(得分:1)

如果您不想要它四舍五入,请使用其他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 --- > $12      -- $13      -- $26
C1 --- > $12.2    -- $13.3    -- $25.5
C2 --- > $12.20   -- $13.30   -- $25.50
C3 --- > $12.200  -- $13.300  -- $25.500

enter image description here