1

Тема: AHK: Формат числа с разрядностью

Как перевести число в читаемый вид с разрядностью?

Сумма := 10000
MsgBox % Сумма ; надо чтобы было 10 000

2

Re: AHK: Формат числа с разрядностью

Zohann

https://autohotkey.com/board/topic/8248 … mat-money/

Var := 10000
Result := RegExReplace(Var, "\G\d+?(?=(?:\d{3})+(?:\D|$))", "$0 ")
MsgBox %Result%

3

Re: AHK: Формат числа с разрядностью

Удобно! После запятой тоже было бы неплохо сгруппировать цифры.

4

Re: AHK: Формат числа с разрядностью

red2881, все работает, так и думал, что встроенной функции нет.

5

Re: AHK: Формат числа с разрядностью

red2881 пишет:

Zohann

https://autohotkey.com/board/topic/8248 … mat-money/

Var := 10000
Result := RegExReplace(Var, "\G\d+?(?=(?:\d{3})+(?:\D|$))", "$0 ")
MsgBox %Result%

Подскажите пожалуйста, что выполняет "\G" в шаблоне? Без неё результат идентичный. И где можно почитать про такие выражения? В хелпе не нашёл.

6

Re: AHK: Формат числа с разрядностью

Якорь к началу предыдущего совпадения.
http://www.pcre.org/pcre.txt

Var := "123 456"
msgbox % RegExReplace(Var, "\d", "0")
msgbox % RegExReplace(Var, "\G\d", "0")

7

Re: AHK: Формат числа с разрядностью

Только в данном случае какой от неё прок? Удобнее же во всём тексте заменить.

Var := "text 10000 text 20000 300000 text"
MsgBox % RegExReplace(Var, "\d+?(?=(?:\d{3})+(?:\D|$))", "$0,")
MsgBox % RegExReplace(Var, "\G\d+?(?=(?:\d{3})+(?:\D|$))", "$0,")
По вопросам возмездной помощи пишите на E-Mail: serzh82saratov@mail.ru
Win10x64 v20H2, AutoHotkey_L v1.1.34.01 (Unicode 32-bit). AhkSpy, Hotkey, ClockGui

8

Re: AHK: Формат числа с разрядностью

Разница такая:

Var := 1234567890.1234567890
MsgBox, % RegExReplace(Var, "\G\d+?(?=(\d{3})+(\D|$))", "$0 ")
MsgBox, % RegExReplace(Var, "\d+?(?=(\d{3})+(\D|$))", "$0 ")
Разработка AHK-скриптов:
e-mail dfiveg@mail.ru
Telegram jollycoder

9

Re: AHK: Формат числа с разрядностью

Благодарю вас, господа! Более чем доходчиво.

10

Re: AHK: Формат числа с разрядностью

teadrinker пишет:

Разница такая:

Я про то что для нескольких чисел не работает, цикл понадобится если во всём тексте заменять, или можно шаблон составить.

По вопросам возмездной помощи пишите на E-Mail: serzh82saratov@mail.ru
Win10x64 v20H2, AutoHotkey_L v1.1.34.01 (Unicode 32-bit). AhkSpy, Hotkey, ClockGui

11

Re: AHK: Формат числа с разрядностью

Ясно, в общем, от задачи зависит.

Разработка AHK-скриптов:
e-mail dfiveg@mail.ru
Telegram jollycoder

12 (изменено: Sgy-x2, 2021-12-07 18:10:35)

Re: AHK: Формат числа с разрядностью

Здравствуйте. Не стал создавать тему т.к. вопрос схожий.
Как преобразовать число 10000 в 10кг?

13

Re: AHK: Формат числа с разрядностью

Перепробовать?

Разработка AHK-скриптов:
e-mail dfiveg@mail.ru
Telegram jollycoder

14 (изменено: Sgy-x2, 2021-12-07 18:12:55)

Re: AHK: Формат числа с разрядностью

teadrinker Преобразовать. Простите, исправил.

15

Re: AHK: Формат числа с разрядностью

Вопрос не совсем понятен, просто замените последние три нуля на "кг".

Разработка AHK-скриптов:
e-mail dfiveg@mail.ru
Telegram jollycoder

16 (изменено: Sgy-x2, 2021-12-07 18:23:25)

Re: AHK: Формат числа с разрядностью

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 ")

17

Re: AHK: Формат числа с разрядностью

Ну да, данный код для этого и предназначен.
Вам проще всего разделить число на 1000 и приписать «кг».

Разработка AHK-скриптов:
e-mail dfiveg@mail.ru
Telegram jollycoder

18

Re: AHK: Формат числа с разрядностью

Хм, интересно, я как-то про это не подумал. Спасибо.

19

Re: AHK: Формат числа с разрядностью

teadrinker Я немного запутался, использую деление в переменной, а на выходе получаю кучу нулей после запятой. Что не так, скажите пожалуйста?

Var1 := 15500
Var2 := 20000
Var3 := (Var1+Var2)/1000
MsgBox, %Var3%кг

20

Re: AHK: Формат числа с разрядностью

А как должен выглядеть результат этого скрипта?

Разработка AHK-скриптов:
e-mail dfiveg@mail.ru
Telegram jollycoder

21 (изменено: Sgy-x2, 2021-12-07 20:55:37)

Re: AHK: Формат числа с разрядностью

Тот что в примере выше так, 35.5кг.

22

Re: AHK: Формат числа с разрядностью

Выбрать по вкусу:

MsgBox, % Round(Var3,1) "кг"	; Округлить до 1 цифры после запятой.
MsgBox, % RTrim(Var3,"0") "кг"	; Удалить '0' справа.
Win10x64, AHK v1.1.33.09 (Unicode 64-bit) | AHK-Wiki | Переменные и выражения | RegEx101

23

Re: AHK: Формат числа с разрядностью

__Михаил__ пишет:
MsgBox, % RTrim(Var3,"0") "кг"	; Удалить '0' справа

Так не стоит, нужно удалять нули только после точки.

Разработка AHK-скриптов:
e-mail dfiveg@mail.ru
Telegram jollycoder

24

Re: AHK: Формат числа с разрядностью

__Михаил__ Этот вариант вполне подходит, спасибо.

% Round(Var3,1) "кг"	

25

Re: AHK: Формат числа с разрядностью

Действительно, не учёл одну проблему - 100 обрежет до 1.

Win10x64, AHK v1.1.33.09 (Unicode 64-bit) | AHK-Wiki | Переменные и выражения | RegEx101

26

Re: AHK: Формат числа с разрядностью

__Михаил__ Подскажите пожалуйста, в примере ниже в первом сообщении результат 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) "кг"

27 (изменено: __Михаил__, 2021-12-07 21:42:55)

Re: AHK: Формат числа с разрядностью

Можно через функцию сократить до такого:

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
}
Win10x64, AHK v1.1.33.09 (Unicode 64-bit) | AHK-Wiki | Переменные и выражения | RegEx101

28

Re: AHK: Формат числа с разрядностью

В MsgBox выводит хорошо, а как мне применить в тексте GUI?

29

Re: AHK: Формат числа с разрядностью

__Михаил__Так смог придумать, но мне кажется что-то не так, закрывать каждый элемент 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

30

Re: AHK: Формат числа с разрядностью

Так зачем целый элемент закрывать, закрывайте только сам текст.

Разработка AHK-скриптов:
e-mail dfiveg@mail.ru
Telegram jollycoder

31

Re: AHK: Формат числа с разрядностью

Функция создаётся один раз, одна для всего. Про Gui не было ни слова, следовательно это не было учтено.
Функцию необходимо тогда переделать на возврат данных.

Win10x64, AHK v1.1.33.09 (Unicode 64-bit) | AHK-Wiki | Переменные и выражения | RegEx101

32

Re: AHK: Формат числа с разрядностью

Как, не покажете?