Показать сообщение отдельно
Старый 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)
 
Ответить с цитированием