fnFormatWithLeadingZeros

MFormatação

Completa um número ou texto com zeros à esquerda até o tamanho informado.

Sintaxe

M
fnFormatWithLeadingZeros(pNumero as any, pNumeroDeCaracteres as nullable number) as nullable text

Parâmetros

pNumeroanyObrigatório

Número ou texto a formatar. O sinal negativo é descartado.

M
25
pNumeroDeCaracteresnullable numberObrigatório

Tamanho final do texto. Mínimo 1; null vale 1.

M
5

Tipo de retorno

nullable text

Exemplos

M
fnFormatWithLeadingZeros(25, 5)
// "00025"

fnFormatWithLeadingZeros(-7, 3)
// "007"

fnFormatWithLeadingZeros(12345, 3)
// "12345"  (maior que o tamanho: volta inteiro)

Código completo

M
let
    fnFormatWithLeadingZeros = (pNumero as any, pNumeroDeCaracteres as nullable number) as nullable text =>
        let
            // Tamanho mínimo 1, sempre inteiro
            vTamanho = Int64.From(Number.RoundDown(List.Max({1, Number.Abs(pNumeroDeCaracteres ?? 1)}))),
            // Número vira texto sem sinal (cultura fixa: 1.5 não vira "1,5"); o resto vira texto sem espaços
            vTexto =
                if pNumero = null then null
                else if pNumero is number then Text.From(Number.Abs(pNumero), "en-US")
                else if pNumero is text then Text.Trim(pNumero)
                else Text.Trim(Text.From(pNumero)),
            // Texto vazio ou "#" vira null; "-" inicial é removido
            vLimpo =
                if vTexto = null or vTexto = "" or vTexto = "#" then null
                else if Text.StartsWith(vTexto, "-") then Text.End(vTexto, Text.Length(vTexto) - 1)
                else vTexto
        in
            if vLimpo = null then null else Text.PadStart(vLimpo, vTamanho, "0"),

    Documentacao = [
        Documentation.Name = "fnFormatWithLeadingZeros",
        Documentation.Description = "Completa um número ou texto com zeros à esquerda.",
        Documentation.LongDescription = "Recebe um número ou texto e o tamanho desejado. Descarta o sinal negativo. Tamanho mínimo 1. Valor nulo, vazio ou ""#"" retorna null.",
        Documentation.Category = "Formatação",
        Documentation.Author = "Paulo André Jesus",
        Documentation.Version = "1.4",
        Documentation.Examples = {
            [Description = "Número", Code = "fnFormatWithLeadingZeros(25, 5)", Result = """00025"""],
            [Description = "Número negativo", Code = "fnFormatWithLeadingZeros(-7, 3)", Result = """007"""],
            [Description = "Texto já com zeros", Code = "fnFormatWithLeadingZeros(""0012"", 6)", Result = """000012"""],
            [Description = "Maior que o tamanho", Code = "fnFormatWithLeadingZeros(12345, 3)", Result = """12345"""]
        }
    ]
in
    Value.ReplaceType(fnFormatWithLeadingZeros, Value.ReplaceMetadata(Value.Type(fnFormatWithLeadingZeros), Documentacao))

Mais informações

Fonte
Paulo André Jesus — OfficeTuning
Versão
1.4

Conhecer a trilha Power BI ao vivo