Извините, ничего не найдено.

Не расстраивайся! Лучше выпей чайку!
Регистрация
Справка
Календарь

Вернуться   forum.boolean.name > Программирование игр для компьютеров > BlitzMax > FAQ и уроки

Ответ
 
Опции темы
Старый 13.11.2013, 04:55   #1
Vanys Dae
AnyKey`щик
 
Аватар для Vanys Dae
 
Регистрация: 21.10.2010
Сообщений: 4
Написано 2 полезных сообщений
(для 2 пользователей)
Восклицание 70/100.0 = 0.699999988

Доброго времени суток.

Пол ночи бился с решением, и никак не смог добиться нормального деления. Решил в итоге написать сюда.

Подскажите, как быть? Чтобы было 70/100.0 = 0.7

Print "70/100.0 = "+(70/100.0)

Print "Round(70/100.0 , 2) = "+Round(70/100.0 , 2)

Print "Float(Round(70/100.0 , 2)) = "+Float(Round(70/100.0 , 2))
			

'========================================================================================

'округляет число до Х знаков после запятой
'с учётом Х+1 знака.
' тоесть 0.9999 округлит до 1, а не до 0.9, как по дефолту

Function Round$(value#, nDecimals%=2)
	
	'получаем строку из цифры
    Local str$ = value
	
	'узнаём, где запятая
    Local pos% = Instr(str , ".")

	'узнаём, что находится на Х+1
	Local nxt%= Int(Chr(str[pos + nDecimals]))
	'Print "находится на Х+1 = "+nxt

	'Математическое округление — округление всегда в бо́льшую по модулю сторону (предыдущий разряд всегда увеличивается на единицу).
	If nxt=>5
		'Print "Математическое округление"
		
		Local add$="0."
		For Local n=1 To (nDecimals) add=add+"0" Next
		
		add=add+"1"

		value=value+Float(add)

		'Print add
		'Print value
		
	EndIf
	
	'снова получаем строку из цифры
    str$ = value

    If nDecimals > 0
        str = str[..pos + nDecimals]
    Else
        str = str[..pos - 1]
    EndIf

    Return str

EndFunction
Выводит:
70/100.0 = 0.699999988
Round(70/100.0 , 2) = 0.70
Float(Round(70/100.0 , 2)) = 0.699999988
З.ы. Делаю игру. Если кому интересно - www.graverun.ru
(Offline)
 
Ответить с цитированием
Старый 13.11.2013, 04:58   #2
moka
.
 
Регистрация: 05.08.2006
Сообщений: 10,429
Написано 3,454 полезных сообщений
(для 6,863 пользователей)
Ответ: 70/100.0 = 0.699999988

Проблемы с float'ами - дело обычное к сожалению..
Вот почитай:
http://effbot.org/pyfaq/why-are-floa...inaccurate.htm

Да и на сайте скринов очень не хватает..
(Offline)
 
Ответить с цитированием
Сообщение было полезно следующим пользователям:
Vanys Dae (13.11.2013)
Старый 13.11.2013, 05:16   #3
Vanys Dae
AnyKey`щик
 
Аватар для Vanys Dae
 
Регистрация: 21.10.2010
Сообщений: 4
Написано 2 полезных сообщений
(для 2 пользователей)
Ответ: 70/100.0 = 0.699999988

Сообщение от moka Посмотреть сообщение
Проблемы с float'ами - дело обычное к сожалению..
Вот почитай:
http://effbot.org/pyfaq/why-are-floa...inaccurate.htm

Да и на сайте скринов очень не хватает..
О! Шустро. Спасибо за ответ, почитаю.

Да, нужно бы добавить раздел с медиа на сайт. Но всё довольно быстро меняется, потому его ещё нет.
Скрины и старый видос размещены в группе, в ВК. Просто подумал, что будет не солидно размещать здесь адрес на неё)
(Offline)
 
Ответить с цитированием
Сообщение было полезно следующим пользователям:
moka (13.11.2013)
Старый 13.11.2013, 07:52   #4
Черный крыс
 
Сообщений: n/a
Ответ: 70/100.0 = 0.699999988

опередили
 
Ответить с цитированием
Старый 13.11.2013, 10:51   #5
impersonalis
Зануда с интернетом
 
Аватар для impersonalis
 
Регистрация: 04.09.2005
Сообщений: 14,014
Написано 6,798 полезных сообщений
(для 20,935 пользователей)
Ответ: 70/100.0 = 0.699999988

Не успел

http://forum.boolean.name/showthread...9543#post29543
http://forum.boolean.name/showthread...149#post233149
__________________
http://nabatchikov.com
Мир нужно делать лучше и чище. Иначе, зачем мы живем? tormoz
А я растила сына на преданьях
о принцах, троллях, потайных свиданьях,
погонях, похищениях невест.
Да кто же знал, что сказка душу съест?
(Offline)
 
Ответить с цитированием
Сообщение было полезно следующим пользователям:
Vanys Dae (13.11.2013)
Старый 13.11.2013, 15:00   #6
Vanys Dae
AnyKey`щик
 
Аватар для Vanys Dae
 
Регистрация: 21.10.2010
Сообщений: 4
Написано 2 полезных сообщений
(для 2 пользователей)
Ответ: 70/100.0 = 0.699999988

В итоге сделал всё через проценты, а не множители.
Таким образом, просто не используя числа, близкие к нулю.

Даже не думал, что такая подстава кроется во float'ах
(Offline)
 
Ответить с цитированием
Ответ


Опции темы

Ваши права в разделе
Вы не можете создавать темы
Вы не можете отвечать на сообщения
Вы не можете прикреплять файлы
Вы не можете редактировать сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.


Часовой пояс GMT +4, время: 18:26.


vBulletin® Version 3.6.5.
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Перевод: zCarot
Style crйe par Allan - vBulletin-Ressources.com