Я пытаюсь разработать, как вычислить общую стоимость ремонта автомобиля, численно безопасным способом, избегая ошибок округления. Я получаю время, потраченное на работу, а затем умножаю его на постоянную стоимость рабочей силы, чтобы получить правильную сумму затрат на рабочую силу, однако она не выясняет, как это должно быть. Вот мой пример, когда на работу было потрачено 20 минут.Умножая фракции безопасным способом C#
Это явно работает неправильно, как треть 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();
Любая помощь/совет приветствуются.
посмотреть в 'decimal' типа. – Alex
@Alex Он преобразует время в строку только с двумя цифрами точности, поэтому никакое количество использования 'decimal' не исправит это (но я согласен, что он должен использовать' decimal' как часть решения - это просто не целое решение) –
Думаю, вам лучше обеспечить способ ввода минут. Хотя '0.33' может выглядеть близко, он по-прежнему« 0.0033333 ... »из точного результата, который может изменить разворот. –