Деление 2-значной десятичной точки без округления результатов

У меня проблема с результатами программы, которую я разрабатываю.

Например, если у меня есть число 8672,59, и я хотел бы разделить его на 2, результат должен быть 4336,295. Вопрос в том, как я могу преобразовать его в 2-значную десятичную точку с округлением результатов, чтобы я мог получить правильную сумму, когда добавляю 2 числа.

Пример.

8672,59/2 = 4336,295

если округлить до 2-значного знака, результат будет 4336,30.

как я могу преобразовать его в 2-значную десятичную точку без округления, чтобы при умножении на два результат был бы таким же, как 8672,59, а не 8672,60

Спасибо!


person Ron S.    schedule 30.10.2013    source источник
comment
Это буквально невозможно.   -  person Ry-♦    schedule 30.10.2013
comment
Извините - я не думаю, что понял ваш вопрос. Я думал, вы просто ищете способ округлить нечетное число (до 2-х знаков), ничего не теряя и не выигрывая при округлении. После повторного прочтения я согласен с @minitech   -  person IniTech    schedule 30.10.2013


Ответы (2)


Вычесть округленный результат из целого.

Dim Total as Double = 8672.59
Dim OneHalf = Math.Round(Total/2, 2)
Dim SecondHalf = Total - OneHalf

В вашем примере Total = 8672,59, поэтому OneHalf = 4336,30 (округлено)

Вторая половина = 8672,59 - 4336,30 = 4336,29.

person IniTech    schedule 30.10.2013
comment
Спасибо за этого чувака! - person Ron S.; 30.10.2013

Если вы хотите, чтобы эта операция была обратимой, вам нужно хранить достаточно информации, чтобы отменить вычисление. Таким образом, если вы сохраните 8672,59/2 только до двух знаков после запятой, вы не сможете получить обратно 8672,59, умножив на 2. Вы получите либо 8672,58, либо 8672,60, в зависимости от того, сохранили ли вы 4336,29 или 4336,30.

Теперь вы можете сохранить число с точностью до трех знаков после запятой (или с любой необходимой вам точностью) и отобразить только два из них. Просто умножьте сохраненное число на 2, и вы получите исходное число.

person John    schedule 30.10.2013