|
Как правильно выполнять округление до ближайшего?, RealView Compiler |
|
|
|
 |
Ответов
|
Dec 14 2009, 16:22
|

Участник

Группа: Участник
Сообщений: 41
Регистрация: 12-10-09
Пользователь №: 52 882

|
предлагаю такой вариант:
long a=5.6; //перед преобразованием умножать на 10, чтоб был остаток от деления в дальнейшем a=a*10; //теперь а=56 a=((int)(a+a%10))/10; //поясню (int) (56+6) и деленое на 10 будет 6, что и необходимо
для отрицательного числа тоже пойдет
ЗЫ при проверке в досовском Borland: задавал а=5.1 далее умножал на 10 и получал а=50.999. кто может объяснить в чем дело?
--------------------
coding, кодинг, koDinГ, copyriting, printing ....
|
|
|
|
|
Dec 14 2009, 17:25
|
Гуру
     
Группа: Свой
Сообщений: 10 713
Регистрация: 11-12-04
Пользователь №: 1 448

|
Цитата(Sneg_87 @ Dec 14 2009, 19:22)  long a=5.6; Ну, дальше можно уже не читать. Цитата(Sneg_87 @ Dec 14 2009, 19:22)  //перед преобразованием умножать на 10, чтоб был остаток от деления в дальнейшем a=a*10; //теперь а=56 a=((int)(a+a%10))/10; //поясню (int) (56+6) и деленое на 10 будет 6, что и необходимо Умножение + 2 деления + сложение = хороший пример того, как делать не надо.
|
|
|
|
|
Dec 15 2009, 18:35
|

Участник

Группа: Участник
Сообщений: 41
Регистрация: 12-10-09
Пользователь №: 52 882

|
Цитата(aaarrr @ Dec 14 2009, 22:25)  Умножение + 2 деления + сложение = хороший пример того, как делать не надо. Чем плох вариант без подключения внешних библиотек? Единственным пожалуй минусом является время, что думаю не критично для ситуации. Ну а вторымб что он не пойдет, сейчас исправим  Вот работающий на 100% (сам проверял) листинг программки, выдающий требуемый результат: Код #include "stdio.h" #include "conio.h" #include <iostream.h>
main () { clrscr(); float a=6.9; int b=0; a=a*10; b=a; b=((int)(b+b%10))/10; printf ("%i",буква "b" не вводилась на форуме); getch(); }
Сообщение отредактировал rezident - Dec 16 2009, 00:19
Причина редактирования: Оформление цитаты исходника.
--------------------
coding, кодинг, koDinГ, copyriting, printing ....
|
|
|
|
|
Dec 15 2009, 18:35
|
Гуру
     
Группа: Свой
Сообщений: 10 713
Регистрация: 11-12-04
Пользователь №: 1 448

|
Цитата(Sneg_87 @ Dec 15 2009, 21:12)  Чем плох вариант без подключения внешних библиотек? Он бесконечно хуже такого макроса: Код #define FROUNDS(x) (((x)>=0)?(long)((x)+0.5f):(long)((x)-0.5f)) А уж это (выделено): Цитата b=((int)(b+b%10))/10; - вообще ни в какие ворота. А то, что он "работает" - так это, извините, не аргумент.
|
|
|
|
Сообщений в этой теме
sonycman Как правильно выполнять округление до ближайшего? Dec 13 2009, 23:19 rezident Приведение типа переменной и округление чисел, воо... Dec 13 2009, 23:26 aaarrr Цитата(rezident @ Dec 14 2009, 02:26) Сам... Dec 13 2009, 23:52  rezident Цитата(aaarrr @ Dec 14 2009, 04:52) Тольк... Dec 14 2009, 00:43  sonycman Цитата(rezident @ Dec 14 2009, 03:26) При... Dec 14 2009, 09:23   demiurg_spb Цитата(sonycman @ Dec 14 2009, 12:23) А в... Dec 14 2009, 09:44 Microwatt да, один клерк в банке наокруглял десятые доли цен... Dec 14 2009, 01:22 dch Цитата(sonycman @ Dec 14 2009, 02:19) Раз... Dec 14 2009, 02:00 sonycman demiurg_spb
По идее да - floor округляет до целого... Dec 14 2009, 09:53 demiurg_spb Цитата(sonycman @ Dec 14 2009, 12:53) В п... Dec 14 2009, 10:54 tag Цитата(sonycman @ Dec 14 2009, 02:19) Зам... Dec 14 2009, 11:24 sonycman Цитата(tag @ Dec 14 2009, 15:24) В описан... Dec 14 2009, 11:44 baralgin sonycman Операция отбрасывания дробной части лёгк... Dec 14 2009, 13:16 sonycman Цитата(baralgin @ Dec 14 2009, 17:16) Ммм... Dec 14 2009, 15:39    Sneg_87 Цитата(aaarrr @ Dec 15 2009, 23:35) А то,... Dec 16 2009, 18:56 demiurg_spb Цитата(Sneg_87 @ Dec 14 2009, 19:22) ЗЫ п... Dec 15 2009, 17:57 sigmaN Sneg_87, такие "конструкции" в реальных ... Dec 16 2009, 23:35
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
|
|
|