Saltar al contenido

Eliminar ceros a la izquierda en powershell

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
    
¡Haz clic para puntuar esta entrada!
(Votos: 0 Promedio: 0)



Utiliza Nuestro Buscador

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *