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

Multiplying fractions in safe way c#

我正在尝试研究如何以数字安全的方式计算汽车维修工作的总成本,避免舍入误差。我得到了在工作上花费的时间,然后将其乘以恒定的人工费率值以获得正确的劳动力成本,但是它并没有计算出它应该如何计算。这是我在工作上花费了 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();