Page 1 of 1

Zahlen formatieren mit "Format()"

Posted: 12 Feb 2019, 04:05
by Gucky_87
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.

Re: Zahlen formatieren mit "Format()"

Posted: 12 Feb 2019, 04:15
by jNizM
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)

Re: Zahlen formatieren mit "Format()"

Posted: 12 Feb 2019, 04:53
by just me
Moin Gucky,

welcher Teil der Doku zu Format() lässt Dich vermuten, dass diese Funktion das können soll?

Re: Zahlen formatieren mit "Format()"

Posted: 12 Feb 2019, 05:03
by Gucky_87
Danke, jNizM, das funktioniert prima.

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

Gucky.

Re: Zahlen formatieren mit "Format()"

Posted: 12 Feb 2019, 05:10
by swagfag
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
}

Re: Zahlen formatieren mit "Format()"

Posted: 12 Feb 2019, 05:13
by just me
@Gucky_87: OK, da wäre ich nicht drauf gekommen.

Grüße, just me

Re: Zahlen formatieren mit "Format()"

Posted: 12 Feb 2019, 05:35
by Gucky_87
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.

Re: Zahlen formatieren mit "Format()"

Posted: 12 Feb 2019, 06:09
by just me
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.")

Re: Zahlen formatieren mit "Format()"

Posted: 12 Feb 2019, 06:13
by Gucky_87
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.

Re: Zahlen formatieren mit "Format()"

Posted: 12 Feb 2019, 07:52
by garry
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

Re: Zahlen formatieren mit "Format()"

Posted: 12 Feb 2019, 08:40
by Gucky_87
Danke auch Dir garry.
Da sieht man mal wieder, wie viele Wege zum Rum, ähm... nach Rom führen.

Gucky.

Re: Zahlen formatieren mit "Format()"

Posted: 10 Jul 2019, 10:03
by Taurus
Schaff es leider nicht den RegEx umzustellen, damit er auch negative Zahlen nimmt. Kann mir jemand helfen?

Re: Zahlen formatieren mit "Format()"

Posted: 10 Jul 2019, 10:08
by Taurus
Peinlich, aber hat sich erledigt:

Return RegExReplace(Number,"\d+?(?=(\d{3})+(?:\D|$))","$0" Separator) ; \G = nur für positive Zahlen