Информация об изменениях

Сообщение Re[5]: Округление double от 10.06.2015 9:33

Изменено 10.06.2015 9:35 _DAle_

Здравствуйте, SL, Вы писали:

SL>и вместо 4.725, в d получаю 4.7249999999999996, тут так то все понятно так устроен double, но ведь можно же это как то учесть.


Если у тебя изначально числа с фиксированной разрядностью, то надо стараться использовать fixed point арифметику. То есть в твоем примере надо умножать не на 0.18, а на 18, и затем использовать целочисленные операции:
int d =  2625 * 18;
int d = (d + 50 / 100);
cout << d / 100 << '.' << d % 100;
Здравствуйте, SL, Вы писали:

SL>и вместо 4.725, в d получаю 4.7249999999999996, тут так то все понятно так устроен double, но ведь можно же это как то учесть.


Если у тебя изначально числа с фиксированной разрядностью, то надо стараться использовать fixed point арифметику. То есть в твоем примере надо умножать не на 0.18, а на 18, и затем использовать целочисленные операции:
int d =  2625 * 18;
int d = (d + 50 / 100);
cout << d / 100 << '.' << setfill('0') << setw(2) << d % 100;