1 (изменено: aktor311, 2017-10-07 14:15:25)

Тема: AHK: Округление числа.

Как округлить полученное число до целых?
Допустим

l=0

Gui, Add, ListBox, x2 y0 w230 h420 vDm, 
Gui, Add, Button, x66 y430 w100 h30 gSave, Запуск
Gui, Show, w236 h470, 
return

Save:
GuiControl,, Dm, Запущено

Input, Капитал, V, {sc1C}
k:=Капитал
GuiControl,, Dm, Капитал в %k% рублей

Input, Рост, V, {sc1C}
r:=Рост
GuiControl,, Dm, Рост %r% процентов

Input, Сумма, V, {sc1C}
s:=Сумма
GuiControl,, Dm, %s% рублей

Loop {
	if (k<s)
		k:=k+(k*(r/100)) && l++
	if (k>=s)
		break
}
l:=l/12

GuiControl,, Dm, Через %l% лет(года).
return
GuiClose:
ExitAppp

Тут я получаю l в месяцах, потом l/12 и получаются года. Как округлить конечный l до целых?
И есть ошибка в этой строчке

if (k<s)
		k:=k+(k*(r/100)) && l++

Не могу понять в чем проблема.

2

Re: AHK: Округление числа.


var := Round(var2) ; автоматическое округление
var := Ceil(var2) ; округление в большую сторону
var := Floor(var2) ; округление в меньшую сторону
Когда вы говорите что не можете сделать, вам всего-лишь не хватает фантазии придумать какой-нибудь костыль.

3

Re: AHK: Округление числа.

Целочисленное деление осуществляется через два слэша(//). Почитайте об этом здесь. Остаток от деления делимого на делитель, возвращает функция Mod(). Округление числа до нужной точности после запятой - Round(). О последних двух почитайте тут.

И пользуйтесь поиском. Все эти знания ни от кого не скрывают.


k := 2000			; Капитал
r := 10				; Процент
r := r / 100
result := 17000		; Ожидаемый результат
months := 0
while (k < result) {
	k += k * r
	months++
}
MsgBox,,Title,% "Для роста капитала до " result " потребуется " months " месяц/цев/ца, или " months//12 " год/года/лет. А если быть чуть точнее, то " Round(months/12,2) " год(года)/лет"

4

Re: AHK: Округление числа.

Спасибо.