2014-11-06 3 views
-2

Я сделал несколько поисков в сети. Тем не менее, в этом случае нет решения.Округление с плавающей точкой, округление от 0,5 до 0

Если значение меньше или равно 5, отбросьте его и все цифры справа от него.

Если значение больше 5, увеличьте на 1 число, подлежащее округлению.

123.4561235 круглый до 123.456123.

123.4561236 круглый до 123.456124.

Есть ли способ сделать это?

+2

Вы можете не круглые числа с плавающей точкой на конкретные числа знаков после запятой. У них нет * десятичных знаков. – EJP

+0

@EJP это не дубликат, ОП имеет специальные правила округления. –

+0

Есть ли причина, по которой у вас есть эти особые правила округления? –

ответ

0

OK здесь вы идете.
Отказ от ответственности: Я не проверял это полностью. Не используйте это в производственном коде, и особенно за деньги (вы не должны использовать с плавающей точкой деньги).

double specialRound(double x, int precision) { 
    return std::round((static_cast<long long>(x * std::pow(10.0, precision + 1)) - 1)/10.0 + 0.05) 
     /std::pow(10.0, precision); 
} 

Demo

Смежные вопросы