Тема: AHK: Формат числа с разрядностью
Как перевести число в читаемый вид с разрядностью?
Сумма := 10000
MsgBox % Сумма ; надо чтобы было 10 000
Вы не вошли. Пожалуйста, войдите или зарегистрируйтесь.
Страницы 1
Чтобы отправить ответ, вы должны войти или зарегистрироваться
Как перевести число в читаемый вид с разрядностью?
Сумма := 10000
MsgBox % Сумма ; надо чтобы было 10 000
Zohann
https://autohotkey.com/board/topic/8248 … mat-money/
Var := 10000
Result := RegExReplace(Var, "\G\d+?(?=(?:\d{3})+(?:\D|$))", "$0 ")
MsgBox %Result%
Удобно! После запятой тоже было бы неплохо сгруппировать цифры.
red2881, все работает, так и думал, что встроенной функции нет.
Zohann
https://autohotkey.com/board/topic/8248 … mat-money/
Var := 10000 Result := RegExReplace(Var, "\G\d+?(?=(?:\d{3})+(?:\D|$))", "$0 ") MsgBox %Result%
Подскажите пожалуйста, что выполняет "\G" в шаблоне? Без неё результат идентичный. И где можно почитать про такие выражения? В хелпе не нашёл.
Якорь к началу предыдущего совпадения.
http://www.pcre.org/pcre.txt
Var := "123 456"
msgbox % RegExReplace(Var, "\d", "0")
msgbox % RegExReplace(Var, "\G\d", "0")
Только в данном случае какой от неё прок? Удобнее же во всём тексте заменить.
Var := "text 10000 text 20000 300000 text"
MsgBox % RegExReplace(Var, "\d+?(?=(?:\d{3})+(?:\D|$))", "$0,")
MsgBox % RegExReplace(Var, "\G\d+?(?=(?:\d{3})+(?:\D|$))", "$0,")
Разница такая:
Var := 1234567890.1234567890
MsgBox, % RegExReplace(Var, "\G\d+?(?=(\d{3})+(\D|$))", "$0 ")
MsgBox, % RegExReplace(Var, "\d+?(?=(\d{3})+(\D|$))", "$0 ")
Благодарю вас, господа! Более чем доходчиво.
Разница такая:
Я про то что для нескольких чисел не работает, цикл понадобится если во всём тексте заменять, или можно шаблон составить.
Ясно, в общем, от задачи зависит.
Здравствуйте. Не стал создавать тему т.к. вопрос схожий.
Как преобразовать число 10000 в 10кг?
Перепробовать?
teadrinker Преобразовать. Простите, исправил.
Вопрос не совсем понятен, просто замените последние три нуля на "кг".
teadrinker Дело в том, что переменные из которых берутся числа складываются, и число получается в 10000-100000 грамм. Я хочу перевести данные в переменных в килограммы, что бы немного сократить общее число.
Если использовать данный код, то получаются числа 10 000, 20 000 и 30 000. Мне нужно что бы было 10кг, 20кг и 30кг.
Var1 := 10000
Var2 := 20000
Var3 := Var1+Var2
MsgBox, % RegExReplace(Var1, "\G\d+?(?=(\d{3})+(\D|$))", "$0 ")
MsgBox, % RegExReplace(Var2, "\G\d+?(?=(\d{3})+(\D|$))", "$0 ")
MsgBox, % RegExReplace(Var3, "\G\d+?(?=(\d{3})+(\D|$))", "$0 ")
Ну да, данный код для этого и предназначен.
Вам проще всего разделить число на 1000 и приписать «кг».
Хм, интересно, я как-то про это не подумал. Спасибо.
teadrinker Я немного запутался, использую деление в переменной, а на выходе получаю кучу нулей после запятой. Что не так, скажите пожалуйста?
Var1 := 15500
Var2 := 20000
Var3 := (Var1+Var2)/1000
MsgBox, %Var3%кг
А как должен выглядеть результат этого скрипта?
Тот что в примере выше так, 35.5кг.
Выбрать по вкусу:
MsgBox, % Round(Var3,1) "кг" ; Округлить до 1 цифры после запятой.
MsgBox, % RTrim(Var3,"0") "кг" ; Удалить '0' справа.
MsgBox, % RTrim(Var3,"0") "кг" ; Удалить '0' справа
Так не стоит, нужно удалять нули только после точки.
__Михаил__ Этот вариант вполне подходит, спасибо.
% Round(Var3,1) "кг"
Действительно, не учёл одну проблему - 100 обрежет до 1.
__Михаил__ Подскажите пожалуйста, в примере ниже в первом сообщении результат 25.5кг, во втором 30.0кг. Как убрать во втором сообщении точку и ноль?
Var1 := 15500
Var2 := 10000
Var3 := 20000
Var4 := (Var1+Var2)/1000
Var5 := (Var2+Var3)/1000
MsgBox, % Round(Var4,1) "кг"
MsgBox, % Round(Var5,1) "кг"
Можно через функцию сократить до такого:
Var1 := 15500
Var2 := 10000
Var3 := 20000
Var4 := (Var1+Var2)/1000
Var5 := (Var2+Var3)/1000
Test(Var4)
Test(Var5)
Return
Test(S, L := 1, T := "кг"){ ; Число, Округление до N знаков после запятой, Текст.
MsgBox, % RTrim(RTrim(Round(S, L),"0"), ".") T
}
В MsgBox выводит хорошо, а как мне применить в тексте GUI?
__Михаил__Так смог придумать, но мне кажется что-то не так, закрывать каждый элемент GUI в функцию, такое себе.
Var1 := 15500
Var2 := 10000
Var3 := 20000
Var4 := (Var1+Var2)/1000
Var5 := (Var2+Var3)/1000
Test1(Var4)
Test2(Var5)
Test1(S, L := 1, T := "кг"){ ; Число, Округление до N знаков после запятой, Текст.
Gui, Add, text,, % StrReplace(Round(S,L),".0") T
}
Test2(S, L := 1, T := "кг"){
Gui, Add, text,, % StrReplace(Round(S,L),".0") T
}
Gui, Show
Так зачем целый элемент закрывать, закрывайте только сам текст.
Функция создаётся один раз, одна для всего. Про Gui не было ни слова, следовательно это не было учтено.
Функцию необходимо тогда переделать на возврат данных.
Как, не покажете?
Страницы 1
Чтобы отправить ответ, вы должны войти или зарегистрироваться