Zahlen formatieren mit "Format()"

Stelle Fragen zur Programmierung mit Autohotkey

Moderator: jNizM

User avatar
Gucky_87
Posts: 331
Joined: 03 Jul 2014, 05:09

Zahlen formatieren mit "Format()"

12 Feb 2019, 04:05

Hallöle zusammen,

ich habe Integerwerte zwischen 1 und 999999999 und möchte diese mittels format()
mit 1000´er Trennung versehen (999.999.999), aber genau das will nicht, wie ich es will.

Könnte mir da jemand ´nen Tipp geben, denn ich verstehe irgendwie die Hilfe nicht.

Gucky.
User avatar
jNizM
Posts: 2509
Joined: 30 Sep 2013, 01:33
GitHub: jNizM
Contact:

Re: Zahlen formatieren mit "Format()"

12 Feb 2019, 04:15

Mit Format noch nicht probiert.. Hab dazu bisher immer die GetNumberFormat Funktion benutzt (https://github.com/jNizM/AHK_Scripts/tree/master/src/format_strings)

Code: Select all

GetNumberFormat(VarIn, locale := 0x0400)
{
	if !(size := DllCall("GetNumberFormat", "uint", locale, "uint", 0, "ptr", &VarIn, "ptr", 0, "ptr", 0, "int", 0))
		throw Exception("GetNumberFormat", -1)
	VarSetCapacity(buf, size * (A_IsUnicode ? 2 : 1), 0)
	if !(DllCall("GetNumberFormat", "uint", locale, "uint", 0, "ptr", &VarIn, "ptr", 0, "Str", buf, "int", size))
		throw Exception("GetNumberFormat", -1)
	return buf
}

MsgBox % SubStr(GetNumberFormat(999999999), 1, -3)
[AHK] 1.1.30.03 x64 Unicode | [WIN] 10 Pro (Version 1903) x64 | [GitHub] Profile
Donations are appreciated if I could help you
just me
Posts: 6525
Joined: 02 Oct 2013, 08:51
Location: Germany

Re: Zahlen formatieren mit "Format()"

12 Feb 2019, 04:53

Moin Gucky,

welcher Teil der Doku zu Format() lässt Dich vermuten, dass diese Funktion das können soll?
User avatar
Gucky_87
Posts: 331
Joined: 03 Jul 2014, 05:09

Re: Zahlen formatieren mit "Format()"

12 Feb 2019, 05:03

Danke, jNizM, das funktioniert prima.

@ just me: Der Teil, der sich mit {:} befasst, ließ mich das vermuten.

Gucky.
swagfag
Posts: 2999
Joined: 11 Jan 2017, 17:59

Re: Zahlen formatieren mit "Format()"

12 Feb 2019, 05:10

heres another one:

Code: Select all

MsgBox % thousandsSepartor(12341241.1235355)

thousandsSepartor(n, separator := ",") {
	static DECIMAL_COMMA := "."

	if InStr(n, DECIMAL_COMMA)
	{
		T := StrSplit(n, DECIMAL_COMMA)
		n := T[1]
		fraction := DECIMAL_COMMA T[2]
	}

	return RegExReplace(n, "\d(?=(?:\d{3})+(?!\d))", "$0" separator) fraction
}
just me
Posts: 6525
Joined: 02 Oct 2013, 08:51
Location: Germany

Re: Zahlen formatieren mit "Format()"

12 Feb 2019, 05:13

@Gucky_87: OK, da wäre ich nicht drauf gekommen.

Grüße, just me
User avatar
Gucky_87
Posts: 331
Joined: 03 Jul 2014, 05:09

Re: Zahlen formatieren mit "Format()"

12 Feb 2019, 05:35

Na ich war der Meinung, dass mit dem "Left/Right" beispiel vielleicht was zu machen wäre, denn
an sich suggeriert mir der Funktionsname u.A. genau das.

Aber ok, jNizMs Beispiel funktioniert bestens.

Danke auch an swagfag ;)

Gucky.
just me
Posts: 6525
Joined: 02 Oct 2013, 08:51
Location: Germany

Re: Zahlen formatieren mit "Format()"

12 Feb 2019, 06:09

Naja, eigentlich zeigt das Beispiel nur die Ausrichtung einer Wertes mit Auffüllzeichen. Da werden nur davor oder dahinter Zeichen hinzugefügt, nicht mittendrin. Aber an sich wäre die Funktionalität in Format() ganz gut aufgehoben.

Noch auch noch ein kurzer RegEx:

Code: Select all

MsgBox, % RegExReplace("9999999999", "\d{1,3}(?=(\d{3})+$)", "$0.")
User avatar
Gucky_87
Posts: 331
Joined: 03 Jul 2014, 05:09

Re: Zahlen formatieren mit "Format()"

12 Feb 2019, 06:13

Hey, das mit dem RegEx ist natürlich (wieder mal) die kürzeste Fassung.
Aber an sich wäre die Funktionalität in Format() ganz gut aufgehoben.
Zustimm ;) Daher hab ich da auch zuerst mit probiert.

Gucky.
garry
Posts: 1890
Joined: 22 Dec 2013, 12:50

Re: Zahlen formatieren mit "Format()"

12 Feb 2019, 07:52

habe mal dieses Beispiel gefunden

Code: Select all

;https://autohotkey.com/board/topic/32897-comma-separated-numbers/
x := 12456789.05
aa:=Separate(x)
msgbox,%aa%
return

Separate(Number, Separator = "'") {
    Return RegExReplace(Number,"\G\d+?(?=(\d{3})+(?:\D|$))","$0" Separator)
}
return
User avatar
Gucky_87
Posts: 331
Joined: 03 Jul 2014, 05:09

Re: Zahlen formatieren mit "Format()"

12 Feb 2019, 08:40

Danke auch Dir garry.
Da sieht man mal wieder, wie viele Wege zum Rum, ähm... nach Rom führen.

Gucky.
User avatar
Taurus
Posts: 61
Joined: 20 Jan 2015, 10:31

Re: Zahlen formatieren mit "Format()"

10 Jul 2019, 10:03

Schaff es leider nicht den RegEx umzustellen, damit er auch negative Zahlen nimmt. Kann mir jemand helfen?
Dev for a better world :) > PHP for Web > AHK H for Local > with KISS (Keep it Short and Simple) on Win 10 Pro (Version 1809) x64
User avatar
Taurus
Posts: 61
Joined: 20 Jan 2015, 10:31

Re: Zahlen formatieren mit "Format()"

10 Jul 2019, 10:08

Peinlich, aber hat sich erledigt:

Return RegExReplace(Number,"\d+?(?=(\d{3})+(?:\D|$))","$0" Separator) ; \G = nur für positive Zahlen
Dev for a better world :) > PHP for Web > AHK H for Local > with KISS (Keep it Short and Simple) on Win 10 Pro (Version 1809) x64

Return to “Ich brauche Hilfe”

Who is online

Users browsing this forum: No registered users and 8 guests