как округлить число до десятых или сотых - Игростроение и развлечение

Форма входа

Приветствую Вас Гость!

Логин:
Пароль:

Наш опрос

Вы нашли кошелёк, в нём 1000 евро и паспорт... !?!?
Всего ответов: 208


    Случайное фото

    Статистика


Поддержите наш проект

WebMoney:
R309699065243
U292079291240
Z373355457648

Счётчики


Rambler's Top100
Рейтинг@Mail.ru

как округлить число до десятых или сотых - Игростроение и развлечение

[ Новые сообщения · Участники · Правила форума · RSS ]

WWW Site Forum
Страница 1 из 11
Игростроение и развлечение » Программинг » С чего начать ? » как округлить число до десятых или сотых (просьба помочь)
как округлить число до десятых или сотых
quadrathellДата: Четверг, 04.06.2009, 04:06 | Сообщение # 1
Admin
Группа: Администраторы
Сообщений: 1018
Репутация: 23
Статус: Offline
столкнулся с этой проблемой в Дарк бейсике...
Ума не приложу как это сделать :(

к примеру мне нужно из числа 29,0322589874 получить 29,03

Если кто знает... помогите алгоритмом или формулой
(похоже такая проблема была во всех языках программирования)


 
IvinДата: Четверг, 04.06.2009, 16:39 | Сообщение # 2
Программист Delphi
Группа: Проверенные
Сообщений: 125
Репутация: 6
Статус: Offline
Ну, не знаю как в дарке, но если знаешь функцию отброса дробной части то просто:
Code

Y:=29,0322589874;
X:=round(Y*100)/100;

Тут, round функция отброса дробной части, X и Y переменные.

ЗЫ Это то что надо?


Все мои рассказы - http://ivin.3dn.ru/
Мои статьи - http://www.textsale.ru/u102051team102051.html
 
quadrathellДата: Пятница, 05.06.2009, 01:52 | Сообщение # 3
Admin
Группа: Администраторы
Сообщений: 1018
Репутация: 23
Статус: Offline
Не получается ... числа с плавающей запятой ну никак не сокращаются...
ответ с моим числом получился 29,3200006866
Вот ведь... даже на калькуляторе всё нормально посчиталось, а тут никак ...
Буду что-то думать... лёгкий способ не прокатывает ....
Или может есть ещё варианты ?


 
IvinДата: Пятница, 05.06.2009, 14:50 | Сообщение # 4
Программист Delphi
Группа: Проверенные
Сообщений: 125
Репутация: 6
Статус: Offline
Quote (quadrathell)
ответ с моим числом получился 29,3200006866

может это дарк глючит так?
Quote (quadrathell)
Или может есть ещё варианты ?

Я других не знаю, возможно есть специальная функция предназначеная именно для округления с заданой точностью, возможно и нет.


Все мои рассказы - http://ivin.3dn.ru/
Мои статьи - http://www.textsale.ru/u102051team102051.html
 
quadrathellДата: Пятница, 05.06.2009, 19:23 | Сообщение # 5
Admin
Группа: Администраторы
Сообщений: 1018
Репутация: 23
Статус: Offline
Quote (Ivin)
может это дарк глючит так?

Возможно...
Собственно мне это число нужно что-бы показать его как процент от суммы...
Я уже готов его как текст показать... всё равно это только для показа ....
Буду искать как перевести число в строку и обрезать как мне надо ...


 
quadrathellДата: Суббота, 06.06.2009, 18:59 | Сообщение # 6
Admin
Группа: Администраторы
Сообщений: 1018
Репутация: 23
Статус: Offline
Немного подумав, вышел из положения вот таким способом...
В примере опишу как я отображаю дробное число с двумя знаками после запятой...
Возможно много переменных натыкал, сделал так чтобы понятно было...
Может кому пригодится...

Code

10 a# = 29,0322589874
20 b#= int(a# * 100)
30 c$ = str$(b#)
40 d = len(c$)
50 if d =3 then p1$ = left$(b$,1):p2$ = right$(b$,2)
60 if d =4 then p1$ = left$(b$,2):p2$ = right$(b$,2)
70 if d =1 then p1$ = left$(b$,1):p2$ = "0"
80 if d =5 then p1$ = left$(b$,3):p2$ = "0"
90 print p1$,",",p2$,"%"

10 - присваиваем a# дробное число
20 - умножаем дробное число на 100 и округляем b#=2903
30 - переводим полученное число переводим в текстовый формат и записываем в переменную c$
40 - Узнаём кол-во символов в строке, записываем в переменную d
50 - Условие если переменная d = 4 то в переменную p1$ записываем 2 левых символа это будет целое число
в p2$ - 2 символа справа это будет дробное число

60 - тоже, но если d = 3 - 1 символ слева и 2 справа - на случай если число окажется к примеру 3,85
70 - тоже, но если число нулевое - будет 0,0%
80 - тоже, если 100, будет 100,0%
90 - вывод результата на экран


 
IvinДата: Воскресенье, 07.06.2009, 17:08 | Сообщение # 7
Программист Delphi
Группа: Проверенные
Сообщений: 125
Репутация: 6
Статус: Offline
т.е. если ты напишешь просто:
Code
10 a# = 29,0322589874  
  20 b#= int(a# * 100)/100

То в b получается каша? (с символом деления я могу и ошибиться, посавь тот что нужно)
Quote (quadrathell)
Узнаём кол-во символов в строке, записываем в переменную d

d=4 a>10
d=3 a>=0 a<10
d=2 a>=0.1 a<0
d=1 a<0.1
С такими условиями не понадобится дополнительная операция над строкой, а значит экономия времени. :)


Все мои рассказы - http://ivin.3dn.ru/
Мои статьи - http://www.textsale.ru/u102051team102051.html
 
quadrathellДата: Понедельник, 08.06.2009, 13:33 | Сообщение # 8
Admin
Группа: Администраторы
Сообщений: 1018
Репутация: 23
Статус: Offline
Ivin, получается я дробное число умножаю на 100 этим самым сдвигаю запятую на две цифры,
после округления всё после точки удаляется....
Затем в D я записываю количество символов в получившейся строке...
естественно если 3 символа, то это число вроди 3.25 .... 5.87 и т.д
если 4 символа, то типа 25.85 .... 38.00
если 5 символов то это 100 ... в моём случае проценты и выше 100 быть не может
1 символ это круглый ноль ... он и в африке ноль :D

Quote (Ivin)
d=4 a>10
d=3 a>=0 a<10
d=2 a>=0.1 a<0
d=1 a<0.1
С такими условиями не понадобится дополнительная операция над строкой, а значит экономия времени. :)

вот скрин результата случайных дробных чисел:

Прикрепления: 1538247.jpg(32Kb)


 
IvinДата: Понедельник, 08.06.2009, 18:32 | Сообщение # 9
Программист Delphi
Группа: Проверенные
Сообщений: 125
Репутация: 6
Статус: Offline
Quote (quadrathell)
Затем в D я записываю количество символов в получившейся строке...

вот, а и я о том же. Ты пользуешся функциями работающими со строкой, это требует гораздо больше процесорного времени чем простая проверка вхождения числа в определенную область.
Quote (quadrathell)
после округления всё после точки удаляется....

Вот, и что теперь мешает разделить число на 100?
у нас было 23,059384579834
умножили на 100 получили 2305,9384579834
округлили 2305
разделили на 100 23,05
Я про это в первом посте писал.
Quote (Ivin)
Тут, round функция отброса дробной части, X и Y переменные.

функция отброса дробной части работает аналогично округлению, только не меняет целую часть числа. В делфи это round, округление abs. Я писал пример по делфи.
Quote (quadrathell)
естественно если 3 символа, то это число вроди 3.25 .... 5.87 и т.д если 4 символа, то типа 25.85 .... 38.00 если 5 символов то это 100

Так если ты это и сам знаешь почему строкой пользуешся? Строкой и дольще и тормозить больше будет, чем с обычными условиями.
Quote (quadrathell)
вот скрин результата случайных дробных чисел:

А он то тут при чем?

Quote (Ivin)

d=4 a>10
d=3 a>=0 a<10
d=2 a>=0.1 a<0
d=1 a<0.1

т.е. если a>10 то d=4
если a>=0 и a<10 то d=3
и т.д. вот что я имел в виду.


Все мои рассказы - http://ivin.3dn.ru/
Мои статьи - http://www.textsale.ru/u102051team102051.html
 
quadrathellДата: Понедельник, 08.06.2009, 18:51 | Сообщение # 10
Admin
Группа: Администраторы
Сообщений: 1018
Репутация: 23
Статус: Offline
Собственно теперь понял )
попробую сегодня ;)


 
kostiaДата: Пятница, 19.06.2009, 21:10 | Сообщение # 11
Группа: Гости





Первым способом должно получиться, просто бывает, что деление глючит и проще заменить деление умножением.
Y=29,0322589874;
X=round(Y*100)*0.01;

или со строками.
X=round(Y*100);//округляем число
s=inttostr(x);//превращаем его в строку
insert('.',s,length(s)-2);//вставляем точку

 
quadrathellДата: Пятница, 19.06.2009, 22:32 | Сообщение # 12
Admin
Группа: Администраторы
Сообщений: 1018
Репутация: 23
Статус: Offline
Спасибо за советы... скоро выложу то что нахимичил ...
Это не игра, а программка для анкетирования и подсчёта результатов... если окажется полезной, то продолжу, а нет, то забью .... Сырой версией уже пользуются... а я для себя навыка немного поднял )


 
IvinДата: Пятница, 19.06.2009, 22:33 | Сообщение # 13
Программист Delphi
Группа: Проверенные
Сообщений: 125
Репутация: 6
Статус: Offline
Quote (kostia)
insert('.',s,length(s)-2);//вставляем точку

не уверен что в дарке есть схожая по действию функция, хотя, я могу и ошибаться.


Все мои рассказы - http://ivin.3dn.ru/
Мои статьи - http://www.textsale.ru/u102051team102051.html
 
quadrathellДата: Суббота, 20.06.2009, 03:08 | Сообщение # 14
Admin
Группа: Администраторы
Сообщений: 1018
Репутация: 23
Статус: Offline
Quote (Ivin)
не уверен что в дарке есть схожая по действию функция, хотя, я могу и ошибаться.

это примерно то что я описывал, только в дельфях на много короче :)


 
IvinДата: Суббота, 20.06.2009, 10:52 | Сообщение # 15
Программист Delphi
Группа: Проверенные
Сообщений: 125
Репутация: 6
Статус: Offline
Quote (quadrathell)
это примерно то что я описывал, только в дельфях на много короче

угу, только тебе пришлось ручками разделять число, а тут просто ставиш точку после второго символа.
ЗЫ неужели действительно в дарке нет функций для работы со строками? Вставка подстроки в строку, удаление символов (начиная с такого-то и по такой-то) и т.д.


Все мои рассказы - http://ivin.3dn.ru/
Мои статьи - http://www.textsale.ru/u102051team102051.html
 
Игростроение и развлечение » Программинг » С чего начать ? » как округлить число до десятых или сотых (просьба помочь)
Страница 1 из 11
Поиск: