## ZTrim() : Remove redundant leading/trailing zeroes from a number

Post your working scripts, libraries and tools
Suresh
Posts: 35
Joined: 03 May 2016, 18:58

### ZTrim() : Remove redundant leading/trailing zeroes from a number

Last edited by Suresh on 02 Jul 2017, 16:23, edited 1 time in total.
wolf_II
Posts: 1710
Joined: 08 Feb 2015, 20:55

### Re: ZTrim() : Remove redundant leading/trailing zeroes from a number

Very nice function, thanks for sharing.

Is it a bug or a feature?
`V := StrSplit( N, ., A_Space )versusV := StrSplit( N, ".", A_Space )`
Suresh
Posts: 35
Joined: 03 May 2016, 18:58

### Re: ZTrim() : Remove redundant leading/trailing zeroes from a number

wolf_II wrote:Is it a bug or a feature?

A mistake..

Edited.. Thanks for pointing it
wolf_II
Posts: 1710
Joined: 08 Feb 2015, 20:55

### Re: ZTrim() : Remove redundant leading/trailing zeroes from a number

Suresh wrote:A mistake..

It worked though!
Suresh
Posts: 35
Joined: 03 May 2016, 18:58

### Re: ZTrim() : Remove redundant leading/trailing zeroes from a number

wolf_II wrote:It worked though!

I'm surprised, But only the dot works.. Accidental discovery.
carno
Posts: 90
Joined: 20 Jun 2014, 16:48

### Re: ZTrim() : Remove redundant leading/trailing zeroes from a number

Very useful!
SpeedMaster
Posts: 112
Joined: 12 Nov 2016, 16:09

### Re: ZTrim() : Remove redundant leading/trailing zeroes from a number

Nice function but only works for the half of the world

https://en.wikipedia.org/wiki/Decimal_m ... arator.svg

Maybe add an option for the decimal Mark ?

ZTrim( N := "" , DM:="." )

`MsgBox % ( A := 1,234000 euro ) "`t=`t" ZTrim( A ) "`n" . ( A := 00,00100 euro ) "`t=`t" ZTrim( A ) "`n" . ( A := € 100,10 ) "`t=`t" ZTrim( A ) "`n" . ( A := 00100,001 € ) "`t=`t" ZTrim( A ) "`n"`
Helgef
Posts: 2674
Joined: 17 Jul 2016, 01:02
Contact:

### Re: ZTrim() : Remove redundant leading/trailing zeroes from a number

Nice function, thanks for sharing.
Suresh wrote:
wolf_II wrote:It worked though!

I'm surprised, But only the dot works.. Accidental discovery.

I'm literally surprised too
`msgbox, % .`
jNizM
Posts: 2303
Joined: 30 Sep 2013, 01:33
GitHub: jNizM
Contact:

### Re: ZTrim() : Remove redundant leading/trailing zeroes from a number

@SpeedMaster
For currency you should use GetCurrencyFormat / GetCurrencyFormatEx or GetNumberFormat / GetNumberFormatEx for numbers with normal number format `2,999.99` / `2.999,99`
[AHK] 1.1.27.02 x64 Unicode | [WIN] 10 Pro (Version 1709) x64 | [GitHub] Profile
Suresh
Posts: 35
Joined: 03 May 2016, 18:58

### Re: ZTrim() : Remove redundant leading/trailing zeroes from a number

SpeedMaster wrote:Nice function but only works for the half of the world

The intended use for ZTrim() is to counter the effect of using high floating point precision with SetFormat and Format()

`SetFormat, Float, 0.12A := 1 / 4B := 4.1 * 100C := 22 / 7MsgBox % ( A := 1 / 4 ) "`t=`t" ZTrim( A ) "`n" . ( B := 4.1 * 100 ) "`t=`t" ZTrim( B ) "`n" . ( PI := 22 / 7 ) "`t=`t" ZTrim( PI ) "`n"`

---------------------------
Ztrim.ahk
---------------------------
0.250000000000 = 0.25
410.000000000000 = 410
3.142857142857 = 3.142857142857

---------------------------
OK
---------------------------

Ofcourse, you are free to alter the function anyway you want.
Suresh
Posts: 35
Joined: 03 May 2016, 18:58

### Re: ZTrim() : Remove redundant leading/trailing zeroes from a number

Helgef wrote:I'm literally surprised too
`msgbox, % .`

`msgbox, % "A" . "B"`

Works properly when concatenating.. I wouldn't know as I rarely use dot to concatenate strings.
SpeedMaster
Posts: 112
Joined: 12 Nov 2016, 16:09

### Re: ZTrim() : Remove redundant leading/trailing zeroes from a number

Suresh wrote:The intended use for ZTrim() is to counter the effect of using high floating point precision with SetFormat() and and Format()

I now understand the purpose of this function thanks for your explanation

`dot=`amsgbox, % dot`
Helgef
Posts: 2674
Joined: 17 Jul 2016, 01:02
Contact:

### Re: ZTrim() : Remove redundant leading/trailing zeroes from a number

`dot=`amsgbox, % dot`

#EscapeChar wrote:`a alert (bell) -- corresponds to Ascii value 7. It can also be manifest in some applications by typing Control+G.

For circular reference, see Dot interpreted as literal string even when unquoted.
SpeedMaster
Posts: 112
Joined: 12 Nov 2016, 16:09

### Re: ZTrim() : Remove redundant leading/trailing zeroes from a number

Ah! it's a bell, I thought it was a dot.
Here the result with the whole alphabet :

`chars=`a`b`c`d`e`f`g`h`i`j`k`l`m`n`o`p`q`r`s`t`u`v`w`x`y`z`.msgbox, % chars `
Suresh
Posts: 35
Joined: 03 May 2016, 18:58

### Re: ZTrim() : Remove redundant leading/trailing zeroes from a number

Helgef wrote:For circular reference, see Dot interpreted as literal string even when unquoted.

Thanks for the topic. Good ,this has been clarified.
FanaticGuru
Posts: 918
Joined: 30 Sep 2013, 22:25

### Re: ZTrim() : Remove redundant leading/trailing zeroes from a number

Not that it matters much but I just use a RegEx to get rid of trailing zeros.

`; Remove Trailing ZerosN := "100.0000"MsgBox % RegExReplace(N, "\.0*\$|(\.\d*?)0*\$", "\$1")`

If you want a function, I guess you could do:

`RemoveTrailingZeros(N){ return RegExReplace(N, "\.0*\$|(\.\d*?)0*\$", "\$1")}`

It does not do leading zeros as I never had the need but that is pretty easy to add: `RegExReplace(N, "^0*|\.0*\$|(\.\d*?)0*\$", "\$1")`

FG
Hotkey Help - Help Dialog for Currently Running AHK Scripts

AHK Startup - Consolidate Multiply AHK Scripts with one Tray Icon

Google Search, Dictionary, Thesaurus - Quickly Get Information from Specific Web Resources

[Function] Timer - Create and Manage Timers
jeeswg
Posts: 3591
Joined: 19 Dec 2016, 01:58
Location: UK

### Re: ZTrim() : Remove redundant leading/trailing zeroes from a number

It's tricky to do this in a RegEx one-liner, I'm not sure that any of the attempts above cover all of the list below for example, here's an attempt I made:

Suresh
Posts: 35
Joined: 03 May 2016, 18:58

### Re: ZTrim() : Remove redundant leading/trailing zeroes from a number

FanaticGuru wrote:Not that it matters much but I just use a RegEx to get rid of trailing zeros.

`; Remove Trailing ZerosN := "100.0000"MsgBox % RegExReplace(N, "\.0*\$|(\.\d*?)0*\$", "\$1")`

Very nice!. Removing trailing zeroes should be sufficient most of the times.
Thanks for sharing!

FanaticGuru wrote:It does not do leading zeros as I never had the need but that is pretty easy to add: `RegExReplace(N, "^0*|\.0*\$|(\.\d*?)0*\$", "\$1")`

The solution doesn't handle negative number.
Suresh
Posts: 35
Joined: 03 May 2016, 18:58

### Re: ZTrim() : Remove redundant leading/trailing zeroes from a number

jeeswg wrote:here's an attempt I made

Very nice! Thanks for sharing!

A float like 0.01 is valid in ahk in these forms: +00.01 / +0.01 / .01 / +.01 / .010
ZTrim() calls Abs() to remove the redundant + sign, adds a leading zero for values like .01

ZTrim() will return 0 when param is either blank or invalid. This may or may not be desirable.
FanaticGuru
Posts: 918
Joined: 30 Sep 2013, 22:25

### Re: ZTrim() : Remove redundant leading/trailing zeroes from a number

It would seem that a simple `Format` will handle most of what is needed.

This expects an actually number recognized by AHK with no spaces, dollar signs, or reversed comma and decimal signs.

No script is going to be able to handle reversed comma and decimals without some kind of assumptions or additional information. Is 1,234 a number less than 2 or more than a 1000?

FG
Hotkey Help - Help Dialog for Currently Running AHK Scripts

AHK Startup - Consolidate Multiply AHK Scripts with one Tray Icon

Google Search, Dictionary, Thesaurus - Quickly Get Information from Specific Web Resources

[Function] Timer - Create and Manage Timers