Доброго времени суток.
Пол ночи бился с решением, и никак не смог добиться нормального деления. Решил в итоге написать сюда.
Подскажите, как быть? Чтобы было 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