Solución:
Puede utilizar la conversión de tipo a decimal
$Test = "00000.22"
[decimal]$Test
Puramente textual La solución es usar el -replace
operador con un expresión regular:
PS> '00000.22' -replace '^0+', '0'
0.22
^0+
coincide con uno o más+
) ceros al principio (^
) de la cadena y los reemplaza con un soltero cero.
Si también quiere asegurarse de que los números con una parte integral que no 0
y / o sin una parte fraccionada se manipulan correctamente, utilice
-replace '^0+(?=[^.])'
(nótese la ausencia de un operando de sustitución, que efectivamente elimina lo que se empareja):
PS> ('00000.22', '0000', '00001.22').ForEach({ $_ -replace '^0+(?=[^.])' })
0.22
0
1.22
Afirmación de anticipación positiva (?=[^.])
elimina eficazmente todos los ceros iniciales (^0+
) siempre que ese cero no sea seguido por un literal .
([^.]
).
Si tu hacer quiero algo como '00000.22'
volverse justo '.22'
, es decir, si desea eliminar la parte integral si resulta ser 0
, la expresión regular se vuelve más simple: '^0+(?=.)'
La respuesta de gms0ulman es conveniente y probablemente funcione bien en la mayoría de los casos, pero hay trampas:
-
Estás cambiando el tipo de datos a
[decimal]
, y convertir eso de nuevo en una cadena puede resultar en una representación específica de la cultura donde.
se convierte en,
(Dicho esto, PowerShell a menudo aplica el invariante cultura, que siempre usos.
); p.ej:# Cast to [decimal] using the German culture ('de') PS> [System.Threading.Thread]::CurrentThread.CurrentCulture="de"; [decimal] '0000.22' 0,22 # !! Note the "," instead of "."
-
Aunque es poco probable con un tipo de datos de alta precisión como
[decimal]
, errores de redondeo están posible:PS> [decimal] '00.99999999999999999999999999999' 1.0000000000000000000000000000 # !! rounding occurred