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