округление числа

Vadimka

Новичок
округление числа

необходимо округлять числа,
60856 до 60000
61999 до 61000
101989 до 101000
подскажите каким образом??
 

sakon

П..и.н..ок
Мутник
floor -- Округляет дробь в меньшую сторону
Для особо умных.....

В принципе можно как предложил мутник: если число больше 1000 то делить на 1000, потом floor, потом умножить на 1000.
Можно если число больше 1000 заменить последнии 3 ссимвола на 0.
 

SelenIT

IT-лунатик :)
Мутник
Чем, по твоему мнению, так плохо предложение sakonа?
 

Мутник

Новичок
SelenIT
Хотя бы тем, что число есть число.. а не строка...

sakon
А ему что надо??? ему надо до меньшего числа округлить.

Что мешает сделать примерно так: floor(60856/1000)*1000 ??? Ну да, надо подумать в каждом случае, какой будет делитель и множитель. Но не вижу в этом огромной проблемы...
Хотя, тут у него делитель это константа...

P.S. править свои сообщения некрасиво...
 

DimbIch

Новичок
в твоем случае можно просто математическими операциями...
делить на 1000 - брать целую часть и умножать на 1000
вот и все...

блин пока писал... уже переправили ответы
 

Мутник

Новичок
SelenIT

ок, может я и неправ... Но это не есть красивое решение, согласись!
 

DimbIch

Новичок
Мутник
имхо нужно писать не красиво - а чтобы наиболее эфективно работало...
принцип екстремального программирования
 

SelenIT

IT-лунатик :)
ИМХО, floor - тоже не идеал, она возвращает тип float, а по логике задачи явно нужен целочисленный результат.
В общем случае все зависит от задачи. Если это для вывода - по-моему, даже красивее форматировать строку. Если для дальнейших математических операций - наверное, надежнее воспользоваться математическими функциями.
 

sakon

П..и.н..ок
SelenIT
>Если для дальнейших математических операций - наверное, надежнее воспользоваться математическими функциями.

А что мешает применить intval?
 

Crazy

Developer
Автор оригинала: SelenIT
ИМХО, floor - тоже не идеал, она возвращает тип float, а по логике задачи явно нужен целочисленный результат.
RTFM. "Returns the next lowest integer value by rounding down value if necessary. The return value of floor() is still of type float because the value range of float is usually bigger than that of integer. "
 

SelenIT

IT-лунатик :)
sakon
Никто не мешает. Но у float, AFAIK, диапазон больше.

Пока я писал это, на то же самое указал Crazy :)
 

DimbIch

Новичок
Crazy
имееться ввиду что возвращается целая часть - а не тип integer
 

SelenIT

IT-лунатик :)
Crazy
Я имел в виду, что с float возможны "сюрпризы" наподобие этого:
It is quite usual that simple decimal fractions like 0.1 or 0.7 cannot be converted into their internal binary counterparts without a little loss of precision. This can lead to confusing results: for example, floor((0.1+0.7)*10) will usually return 7 instead of the expected 8 as the result of the internal representation really being something like 7.9999999999....
 

Мутник

Новичок
SelenIT
DimbIch

подождите автора топика ;) если ему ничего не подойдет - думать надо будет дальше! !!!
 

Vadimka

Новичок
эти числа после округления должны определять каталог в который будет положен файл:
60856 в 60000
61999 в 61000
101989 в 101000
 
Сверху