我正在尝试找出如何以数字安全的方式计算出车辆维修工作的总成本,避免舍入误差。我得到了在工作上花费的时间,然后将其乘以恒定的劳动价值以得到正确的劳动成本,但是这并不能算出应该如何。这是我的示例,其中工作花费了20分钟。



这显然是错误的,因为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();


任何帮助/建议表示赞赏。

最佳答案

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

其次,在进行财务计算时,通常应使用decimal类型而不是double类型,这将为您提供更高的准确性(尽管它仍然不完全准确)。

首先要做的是使用totalTime来计算总工资,而不是使用转换后的字符串值:

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

关于c# - 以安全的方式乘法分数C#,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/29469779/

10-11 17:49