Ganz-Zahlenformat mit Tausendertrennzeichen

Stelle Fragen zur Programmierung mit Autohotkey

Moderator: jNizM

User avatar
LuckyJoe
Posts: 283
Joined: 02 Oct 2013, 09:52

Ganz-Zahlenformat mit Tausendertrennzeichen

Post by LuckyJoe » 07 Jan 2021, 06:22

Hallo zusammen,

wie bekomme ich eine Variable in eine Ganzzahl (ohne Nachkommastellen) mit Tausendertrennzeichen umgewandelt?
Ich habe zwar die Funktion "GetNumberFormat" von jNizM hier gefunden, aber da hängen immer noch die beiden Nachkommastellen dran. Mit dem "Format"-Befehl komme ich nicht weiter:

Code: Select all

Z := 76543,21       ; <<<< soll werden: 76.543
MsgBox, % Format("{:d}", Z)
MsgBox, % Format("{:.0f}", Z)
MsgBox, % Format("{:.0f}", GetNumberFormat(Z))
Wie bekomme ich aus Z den Wert "76.543"?
Herzliche Grüße aus dem Rheinland
Lucky Joe
BoBo
Posts: 4362
Joined: 13 May 2014, 17:15

Re: Ganz-Zahlenformat mit Tausendertrennzeichen

Post by BoBo » 07 Jan 2021, 07:04

AHK kennt kein Komma als Nachkommastellenseparator. Demnach handelt es sich um einen String.

Code: Select all

Z:="76543,31"
MsgBox % Z := GetNumberFormat(Round(StrReplace(Z,",",".")))
Rohwedder
Posts: 3975
Joined: 04 Jun 2014, 08:33
Location: Germany

Re: Ganz-Zahlenformat mit Tausendertrennzeichen

Post by Rohwedder » 07 Jan 2021, 07:15

Hallo,
oder einfach:

Code: Select all

Z := 1234567890.123
Z:= Round(Z)
Loop, 9
	Z := RegExReplace( Z, "(\d)(\d{3})((\.\d{3})*)$", "$1.$2$3")
MsgBox,% Z
User avatar
LuckyJoe
Posts: 283
Joined: 02 Oct 2013, 09:52

Re: Ganz-Zahlenformat mit Tausendertrennzeichen

Post by LuckyJoe » 07 Jan 2021, 07:30

... wow , so schnell Hilfe :-) - Danke euch! Funktioniert beides.

@Bobo: ja, du hast Recht, mein Beispiel war nicht ganz korrekt. Tatsächlich kommt die Zahl "Z" aus Excel, wo ich eine Zelle auslese, die das Format "76543.210000" hat.

Mittlerweile habe ich noch eine andere Funktion von jNizM hier gefunden, die mir die Zahl wie gewünscht umwandelt:

Code: Select all

Decimal_Mark(num, locale := 0x0400) ; https://msdn.microsoft.com/en-us/library/dd318110.aspx
{
    size := DllCall("GetNumberFormat", "UInt", locale, "UInt", 0, "Str", num, "Ptr", 0, "Ptr", 0, "Int", 0)
    VarSetCapacity(buf, size * (A_IsUnicode ? 2 : 1), 0)
    DllCall("GetNumberFormat", "UInt", locale, "UInt", 0, "Str", num, "Ptr", 0, "Str", buf, "Int", size)
    return SubStr(buf, 1, StrLen(buf) - 3)
}
Herzliche Grüße aus dem Rheinland
Lucky Joe
User avatar
jNizM
Posts: 2681
Joined: 30 Sep 2013, 01:33
GitHub: jNizM
Contact:

Re: Ganz-Zahlenformat mit Tausendertrennzeichen

Post by jNizM » 07 Jan 2021, 09:51

Den SubStr würde ich heute perfomanter bauen (zusammen mit meiner aktuellen funktion)

Code: Select all

GetNumberFormatEx(Value, LocaleName := "!x-sys-default-locale") ; Windows Vista and later
{
	if (Size := DllCall("GetNumberFormatEx", "str", LocaleName, "uint", 0, "str", Value, "ptr", 0, "ptr", 0, "int", 0)) {
		VarSetCapacity(NumberStr, Size << !!A_IsUnicode, 0)
		if (DllCall("GetNumberFormatEx", "str", LocaleName, "uint", 0, "str", Value, "ptr", 0, "str", NumberStr, "int", Size))
			return SubStr(NumberStr, 1, -3)
	}
	return false
}


GetNumberFormat(Value, Locale := 0x0400) ; Windows 2000 and later
{
	if (Size := DllCall("GetNumberFormat", "uint", Locale, "uint", 0, "str", Value, "ptr", 0, "ptr", 0, "int", 0)) {
		VarSetCapacity(NumberStr, Size << !!A_IsUnicode, 0)
		if (DllCall("GetNumberFormat", "uint", Locale, "uint", 0, "str", Value, "ptr", 0, "str", NumberStr, "int", Size))
			return SubStr(NumberStr, 1, -3)
	}
	return false
}
[AHK] 1.1.33.02 x64 Unicode | [WIN] 10 Pro (Version 20H2) x64 | [GitHub] Profile
Donations are appreciated if I could help you
User avatar
LuckyJoe
Posts: 283
Joined: 02 Oct 2013, 09:52

Re: Ganz-Zahlenformat mit Tausendertrennzeichen

Post by LuckyJoe » 07 Jan 2021, 10:01

Hi jNizM,
danke für das "Update" :-))
Herzliche Grüße aus dem Rheinland
Lucky Joe
effel
Posts: 293
Joined: 16 Jan 2018, 13:34

Re: Ganz-Zahlenformat mit Tausendertrennzeichen

Post by effel » 07 Jan 2021, 14:20

Hallo,

was passiert mit den Stellen hinter dem Komma? Müsste hier nicht eine Regel wie kaufmännisches runden vorkommen?

aus:

Code: Select all

Z := 76543.99
wird auch 76.543
Post Reply

Return to “Ich brauche Hilfe”