以安全的方式乘以分数c#

时间:2015-04-06 10:49:02

标签: c# winforms numeric

我试图找出如何以数字安全的方式计算车辆维修工作的总成本,避免舍入错误。我得到了在工作上花费的时间,然后将其乘以一个恒定的劳动力价值,以获得正确的劳动力成本,但是它没有计算出应该如何。这是我在工作上花了20分钟的例子。

enter image description here

这显然是错误的,因为30英镑的三分之一是10英镑,所以我如何避免我得到的舍入错误?

以下是我获得总时间的方法。

TimeSpan totalTime = TimeSpan.Zero;

    foreach (DataRow timeEntry in dhJob.DataStore.Tables[jobTimeCollectionName].Rows)
    {
        DateTime start = Convert.ToDateTime(timeEntry["jobtimestart"]);
        DateTime end = Convert.ToDateTime(timeEntry["jobtimeend"]);
        totalTime += (end - start);
    }

    tb_labourtime.Text = Convert.ToString(Math.Round(totalTime.TotalHours, 2));

    tb_labourtotal.Text = (Convert.ToDouble(tb_labourtime.Text) * Convert.ToInt32(tb_labourrate.Text)).ToString();

感谢任何帮助/建议。

1 个答案:

答案 0 :(得分:2)

首先,您要将totalTime转换为仅具有两位精度的字符串表示,这不会非常准确。

其次,在进行财务计算时,通常应使用decimal类型而非double类型,这样可以提高准确性(尽管它仍然不完全准确)。

要做的第一件事是使用totalTime计算总工资而不是使用转换后的字符串值:

tb_labourtotal.Text = (totalTime.TotalHours * Convert.ToInt32(tb_labourrate.Text)).ToString();