Zahlen formatieren mit "Format()"

Stelle Fragen zur Programmierung mit Autohotkey

Moderator: jNizM

User avatar
Gucky_87
Posts: 375
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: 3183
Joined: 30 Sep 2013, 01:33
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] v2.0.5 | [WIN] 11 Pro (Version 22H2) | [GitHub] Profile
just me
Posts: 9424
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: 375
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: 6222
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: 9424
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: 375
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: 9424
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: 375
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: 3740
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: 375
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: 94
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?
:beard: Full Stack Developer > Dev for a better world | PHP for Web | AHK H for Local | with KISS (Keep IT Short and Simple) on Win 10 Pro (Version 2004) x64
User avatar
Taurus
Posts: 94
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
:beard: Full Stack Developer > Dev for a better world | PHP for Web | AHK H for Local | with KISS (Keep IT Short and Simple) on Win 10 Pro (Version 2004) x64
DDR-Keule

Re: Zahlen formatieren mit "Format()"

30 Jun 2023, 16:07

Altes Thema ??

Ich hoffe einer kann mir helfen, da ich mich mit Regex und Co. auch garnicht anfreunden kann.

2 Fragen ;)

Wie bekomme ich aus 4 eine 04
Wie bekome ich aus 1234 den Wert 1.234 (also das Tausender Trennzeichen - 12345 zu 12.345)

Danke Euch

LG Keule
just me
Posts: 9424
Joined: 02 Oct 2013, 08:51
Location: Germany

Re: Zahlen formatieren mit "Format()"

01 Jul 2023, 02:58

Moin Keule,

zu Frage 1:

Code: Select all

Eingabe := 4
Ausgabe := Format("{:02}", Eingabe)
MsgBox, %Ausgabe%

zu Frage 2:
Indem Du eine der oben eingestellten Lösungen verwendest.

Viel Spaß noch!
garry
Posts: 3740
Joined: 22 Dec 2013, 12:50

Re: Zahlen formatieren mit "Format()"

01 Jul 2023, 08:29

noch ein altes Beispiel ...
;-- add leading zero's 000-999

Code: Select all

V1:=98,I:=0
loop,5
{
v2:=(v1+i)
v3:=SubStr(000 V2, -3)
msgbox, 262208, ,%v3%,2  ;- show for 2 seconds
i++
}
exitapp

Return to “Ich brauche Hilfe”

Who is online

Users browsing this forum: No registered users and 26 guests