我有这个代码:
<tbody>
@foreach (var day in user.WorkDays)
{
<tr>
<th>@day.Date.ToString("MM/dd/yy")</th>
<td>
<ul>
@foreach (var note in day.Notes)
{
<li>@note.Text</li>
}
</ul>
</td>
<td>@string.Format("{0:0.00}", Math.Truncate(day.Totals.Regular * 100) / 100)</td>
<td>@string.Format("{0:0.00}", Math.Truncate(day.Totals.Overtime * 100) / 100)</td>
<td>@string.Format("{0:0.00}", Math.Truncate(day.Totals.Doubletime * 100) / 100)</td>
<td>@string.Format("{0:0.00}", Math.Truncate(day.Totals.Sick * 100) / 100)</td>
<td>@string.Format("{0:0.00}", Math.Truncate(day.Totals.Vacation * 100) / 100)</td>
<td>@string.Format("{0:0.00}", Math.Truncate(day.Totals.Holiday * 100) / 100)</td>
<td>@string.Format("{0:0.00}", Math.Truncate(day.Totals.Overall * 100) / 100)</td>
</tr>
}
</tbody>
<tfoot>
<tr>
<th>Totals:</th>
<th></th>
<th>@string.Format("{0:0.00}", Math.Truncate(user.Totals.Regular * 100) / 100)</th>
<th>@string.Format("{0:0.00}", Math.Truncate(user.Totals.Overtime * 100) / 100)</th>
<th>@string.Format("{0:0.00}", Math.Truncate(user.Totals.Doubletime * 100) / 100)</th>
<th>@string.Format("{0:0.00}", Math.Truncate(user.Totals.Sick * 100) / 100)</th>
<th>@string.Format("{0:0.00}", Math.Truncate(user.Totals.Vacation * 100) / 100)</th>
<th>@string.Format("{0:0.00}", Math.Truncate(user.Totals.Holiday * 100) / 100)</th>
<th>@string.Format("{0:0.00}", Math.Truncate(user.Totals.Overall * 100) / 100)</th>
</tr>
</tfoot>
它产生这样的结果:
(在新选项卡中打开图像以查看全尺寸。)
如果您查看最右侧列中的值,您会注意到它们与表右下角的
79.98
不相加。我计算出它们加起来是 79.93
。因为我知道有人会问,是的,
79.98
是正确的总数。应该加起来的值是不正确的。我究竟做错了什么?我一直在摆弄这个太久了,没有看到任何变化。
编辑:
阅读一些评论后,很明显
Math.Truncate()
调用没有帮助。这是我之前的情况:<tbody>
@foreach (var day in user.WorkDays)
{
<tr>
<th>@day.Date.ToString("MM/dd/yy")</th>
<td>
<ul>
@foreach (var note in day.Notes)
{
<li>@note.Text</li>
}
</ul>
</td>
<td>@day.Totals.Regular.ToString("0.00")</td>
<td>@day.Totals.Overtime.ToString("0.00")</td>
<td>@day.Totals.Doubletime.ToString("0.00")</td>
<td>@day.Totals.Sick.ToString("0.00")</td>
<td>@day.Totals.Vacation.ToString("0.00")</td>
<td>@day.Totals.Holiday.ToString("0.00")</td>
<td>@day.Totals.Overall.ToString("0.00")</td>
</tr>
}
</tbody>
<tfoot>
<tr>
<th>Totals:</th>
<th></th>
<th>@user.Totals.Regular.ToString("0.00")</th>
<th>@user.Totals.Overtime.ToString("0.00")</th>
<th>@user.Totals.Doubletime.ToString("0.00")</th>
<th>@user.Totals.Sick.ToString("0.00")</th>
<th>@user.Totals.Vacation.ToString("0.00")</th>
<th>@user.Totals.Holiday.ToString("0.00")</th>
<th>@user.Totals.Overall.ToString("0.00")</th>
</tr>
</tfoot>
现在,这些值加起来甚至是
80
。即使是 .02
也高于实际值。 最佳答案
所以这才是真正的问题——“总数”应该是原始数字的总和还是截断后的数字的总和。 (作为旁注,ROUND
会减少错误但不会消除它。)。如果总数应该是原始数字的总和,那么您可以:
如果总数应该是四舍五入数字的总数,那么在报告中很容易做到,但它不会与原始数字的总数相匹配(除非您对源中的原始数字进行四舍五入)。
关于c# - string.Format() 在 double 值上给出不准确的结果,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/23376079/