Округление - Сообщения
Столкнулся с необходимостью округления в программе до заданной точности, к примеру число 524 нужно округлить до ближайших 50 в большую сторону, т.е. чтобы получилось 550. Штатной функцией roud не выходит.
[MATH lang=eng]myround(x,prec):round(x*10^prec,0)*10^-prec[/MATH]
[MATH lang=eng]myround(527,-2)=500[/MATH]
[MATH lang=eng]myround(263,-2)=300[/MATH]
Edit: надо блин читать внимательнее. Прошу прощения, про большую сторону не прочитал.
WroteЭто, конечно, банальность, но ведь это можно оформить функцией и пользоваться не задумываясь?
[MATH lang=eng]myround(x,prec):round(x*10^prec,0)*10^-prec[/MATH]
[MATH lang=eng]myround(527,-2)=500[/MATH]
[MATH lang=eng]myround(263,-2)=300[/MATH]
Ну второе выражение правильно вычисляется - 263 округляется до ближайших 50 в большую сторону и выходит 300.
А вот с первым выражением не согласен - 527 с округлением в большую сторону должно быть 550, а у вас выходит 500.

[MATH lang=eng]myceil(263,50)=300[/MATH]
[MATH lang=eng]myceil(527,50)=550[/MATH]
Или короче
[MATH lang=eng]myceil(x,prec)

Wrote[MATH lang=eng]myceil(x,prec)
round(x/prec,0)+(x/prec>round(x/prec,0)))*prec[/MATH]
[MATH lang=eng]myceil(263,50)=300[/MATH]
[MATH lang=eng]myceil(527,50)=550[/MATH]
Или короче
[MATH lang=eng]myceil(x,prec)round(x/prec,0)+(mod(x/prec,1)>0))*prec[/MATH]
Вариант 1 работает корректно, а вот 2 вариант не очень. Спасибо
[MATH lang=eng]myceil(x,prec)

WroteЛучше даже так:
[MATH lang=eng]myceil(x,prec)round(x/prec,0)+(mod(x,prec)>0))*prec[/MATH]
В этом случае при значении 527 функция округляет до 600, а должна до 550
При значении 524 округляет до 550, а уже при 525 до 600, хотя в обоих случаях должна округлять до 550
WroteВ этом случае при значении 527 функция округляет до 600, а должна до 550
При значении 524 округляет до 550, а уже при 525 до 600, хотя в обоих случаях должна округлять до 550
Вы правы, вот как должно быть:
[MATH lang=eng]myceil(x,prec)

WroteWroteВ этом случае при значении 527 функция округляет до 600, а должна до 550
При значении 524 округляет до 550, а уже при 525 до 600, хотя в обоих случаях должна округлять до 550
Вы правы, вот как должно быть:
[MATH lang=eng]myceil(x,prec)trunc(x/prec)+(mod(x,prec)>0))*prec[/MATH]
Ок. Спасибо. Теперь все работает

[MATH lang=eng]myceil2(x,prec)

-
Новые сообщения
-
Нет новых сообщений