Cambiar el tipo de datos de número a texto agrega cero final

Un usuario Pregunto ✅

Anónimo

Tengo un problema extraño en el que a veces obtengo ceros finales al cambiar el tipo de datos de número decimal a texto. Esto está sucediendo en Power Query con Power BI Desktop.

Tengo una columna numérica con, por ejemplo, el valor 0,00785 en eso. Luego lo redondeo así:

= Table.TransformColumns(#"Filtered Rows",{{"Verkoopfactuur_prijs", each Number.Round(_, 4, 0), type number}, {"Verkoopfactuur_inkoopwaarde", each Number.Round(_, 2, 0), type number}})

Que me atrapa 0,0079 como se esperaba.

Luego cambio el tipo de datos a texto con este código:

= Table.TransformColumnTypes(#"dwh Vervang Null waarden", List.Transform(Table.ColumnNames(#"dwh Vervang Null waarden"), each {_, type text}))

Esperaría que el valor se mantuviera igual, sin embargo, cambia a 0,00790. Este cero final se agrega para varios valores, pero no para todos. ¿Alguna idea sobre cómo abordar este problema?

En respuesta a Anónimo

Hola @Anónimo

Lo siento, no puedo entender por qué causa este problema.

Tal vez mi solución anterior no sea buena, marque esta.

Capture3.JPG

let
    Source = Table.FromRows(Json.Document(Binary.Decompress(Binary.FromText("TczLCcAwDAPQXXIuxrFkJ56lZP81mk8pvUlPoPsuKqqte7lWMniUcR2NllsNqvZp9roV9Giv9iBsa2+RuZUpygQnI2Xu9c9TCaHTzrPNAoeuARQzehnjAQ==", BinaryEncoding.Base64), Compression.Deflate)), let _t = ((type text) meta [Serialized.Text = true]) in type table [Verkoopfactuur_prijs = _t, Verkoopfactuur_inkoopwaarde = _t]),
    #"Changed Type" = Table.TransformColumnTypes(Source,{{"Verkoopfactuur_prijs", type number}, {"Verkoopfactuur_inkoopwaarde", type number}}),
    #"dwh Vervang Null waarden"= Table.TransformColumns(#"Changed Type",{{"Verkoopfactuur_prijs", each Number.Round(_, 4, 0), type number}, {"Verkoopfactuur_inkoopwaarde", each Number.Round(_, 2, 0), type number}}),
    #"Changed Type1" = Table.TransformColumnTypes(#"dwh Vervang Null waarden",{{"Verkoopfactuur_prijs", type text}}),
    #"Split Column by Delimiter" = Table.SplitColumn(#"Changed Type1", "Verkoopfactuur_prijs", Splitter.SplitTextByDelimiter(".", QuoteStyle.Csv), {"Verkoopfactuur_prijs.1", "Verkoopfactuur_prijs.2"}),
    #"Changed Type2" = Table.TransformColumnTypes(#"Split Column by Delimiter",{{"Verkoopfactuur_prijs.1", Int64.Type}, {"Verkoopfactuur_prijs.2", type text}}),
    #"Extracted First Characters" = Table.TransformColumns(#"Changed Type2", {{"Verkoopfactuur_prijs.2", each Text.Start(_, 4), type text}}),
    #"Merged Columns" = Table.CombineColumns(Table.TransformColumnTypes(#"Extracted First Characters", {{"Verkoopfactuur_prijs.1", type text}}, "en-US"),{"Verkoopfactuur_prijs.1", "Verkoopfactuur_prijs.2"},Combiner.CombineTextByDelimiter(".", QuoteStyle.None),"Verkoopfactuur_prijs")
in
    #"Merged Columns"
Atentamente
Maggie
Equipo de apoyo de la comunidad _ Maggie Li
Si esta publicación ayuda, considere Aceptarla como la solución para ayudar a los demás miembros a encontrarla más rápidamente.

Aivars

Tengo el mismo problema: 2,2 se convierte en 2,2000000000000002 cuando se convierte a texto en el editor de consultas.

Anónimo

En respuesta a Aivars

Peor aún, si convierte «2.1» en texto, obtiene: 2.0099999999999998, por lo que no puede simplemente recortar caracteres para obtener la respuesta correcta.

Supongo que los números de puntos flotantes bajo el capó se están convirtiendo al formato float64 para obtener este tipo de errores de redondeo (estoy importando desde Excel en este caso).

Hola @Anónimo

¿Es este problema resuelto?
Si está descuidado, ¿podría aceptarlo como una solución para cerrar este caso?
Si no es así, por favor hágamelo saber.
Atentamente
Maggie

Anónimo

En respuesta a v-juanli-msft

Su solución parece funcionar. Todavía me gustaría una solución en lugar de una solución alternativa, pero aceptaré la respuesta por ahora.

En respuesta a Anónimo

Hola @Anónimo

Gracias.

Informaría de este problema a MS. Si se acepta y se solucionará o se le proporcionará alguna solución, se lo diré.

Atentamente
Maggie

Anónimo

Todavía no he encontrado una solución o solución que funcione. Cualquier ayuda sería apreciada.

En respuesta a Anónimo

Hola @Anónimo

Lo siento, no puedo entender por qué causa este problema.

Tal vez mi solución anterior no sea buena, marque esta.

Capture3.JPG

let
    Source = Table.FromRows(Json.Document(Binary.Decompress(Binary.FromText("TczLCcAwDAPQXXIuxrFkJ56lZP81mk8pvUlPoPsuKqqte7lWMniUcR2NllsNqvZp9roV9Giv9iBsa2+RuZUpygQnI2Xu9c9TCaHTzrPNAoeuARQzehnjAQ==", BinaryEncoding.Base64), Compression.Deflate)), let _t = ((type text) meta [Serialized.Text = true]) in type table [Verkoopfactuur_prijs = _t, Verkoopfactuur_inkoopwaarde = _t]),
    #"Changed Type" = Table.TransformColumnTypes(Source,{{"Verkoopfactuur_prijs", type number}, {"Verkoopfactuur_inkoopwaarde", type number}}),
    #"dwh Vervang Null waarden"= Table.TransformColumns(#"Changed Type",{{"Verkoopfactuur_prijs", each Number.Round(_, 4, 0), type number}, {"Verkoopfactuur_inkoopwaarde", each Number.Round(_, 2, 0), type number}}),
    #"Changed Type1" = Table.TransformColumnTypes(#"dwh Vervang Null waarden",{{"Verkoopfactuur_prijs", type text}}),
    #"Split Column by Delimiter" = Table.SplitColumn(#"Changed Type1", "Verkoopfactuur_prijs", Splitter.SplitTextByDelimiter(".", QuoteStyle.Csv), {"Verkoopfactuur_prijs.1", "Verkoopfactuur_prijs.2"}),
    #"Changed Type2" = Table.TransformColumnTypes(#"Split Column by Delimiter",{{"Verkoopfactuur_prijs.1", Int64.Type}, {"Verkoopfactuur_prijs.2", type text}}),
    #"Extracted First Characters" = Table.TransformColumns(#"Changed Type2", {{"Verkoopfactuur_prijs.2", each Text.Start(_, 4), type text}}),
    #"Merged Columns" = Table.CombineColumns(Table.TransformColumnTypes(#"Extracted First Characters", {{"Verkoopfactuur_prijs.1", type text}}, "en-US"),{"Verkoopfactuur_prijs.1", "Verkoopfactuur_prijs.2"},Combiner.CombineTextByDelimiter(".", QuoteStyle.None),"Verkoopfactuur_prijs")
in
    #"Merged Columns"
Atentamente
Maggie
Equipo de apoyo de la comunidad _ Maggie Li
Si esta publicación ayuda, considere Aceptarla como la solución para ayudar a los demás miembros a encontrarla más rápidamente.

Hola @Anónimo

Modifique el código en el editor avanzado como se muestra a continuación

Capture5.JPG

let
    Source = Table.FromRows(Json.Document(Binary.Decompress(Binary.FromText("PcjRCcAwCAXAXfwOxWp86izB/dcItSF/x61F/DB7GI1Pogaq8S88e0WZ5W7G26vT4GcDU6U3HJlUtQE=", BinaryEncoding.Base64), Compression.Deflate)), let _t = ((type text) meta [Serialized.Text = true]) in type table [Verkoopfactuur_prijs = _t, Verkoopfactuur_inkoopwaarde = _t]),
    #"Changed Type" = Table.TransformColumnTypes(Source,{{"Verkoopfactuur_prijs", type number}, {"Verkoopfactuur_inkoopwaarde", type number}}),
    #"dwh Vervang Null waarden"= Table.TransformColumns(#"Changed Type",{{"Verkoopfactuur_prijs", each Number.Round(_, 4, 0), type number}, {"Verkoopfactuur_inkoopwaarde", each Number.Round(_, 2, 0), type number}}),
    #"Extracted First Characters" = Table.TransformColumns(#"dwh Vervang Null waarden", {{"Verkoopfactuur_prijs", each Text.Start(Text.From(_, "en-US"), 6), type text},{"Verkoopfactuur_inkoopwaarde", each Text.Start(Text.From(_, "en-US"), 4), type text}})
in
    #"Extracted First Characters"
Atentamente
Maggie
Equipo de apoyo de la comunidad _ Maggie Li
Si esta publicación ayuda, considere Aceptarla como la solución para ayudar a los demás miembros a encontrarla más rápidamente.

sds

Anónimo

En respuesta a v-juanli-msft

Hola @ v-juanli-msft,

¡Gracias por tu respuesta! Sin embargo, lamentablemente, su solución no se ajusta al requisito. Los números en mi columna también pueden tener valores de, digamos, 49.0493, no siempre son 6 caracteres.

Estaba pensando que, como solución alternativa, podría verificar en qué posición está el último cero en la cadena y si esa es la misma que la longitud total de la cadena, debe eliminarse. Aunque eso no funciona.

También, por supuesto, preferiría una solución en lugar de una solución alternativa. 🙂

AnkitBI

En respuesta a v-juanli-msft

@ v-juanli-msft – Eso es un WorkAround. Cualquier motivo de este comportamiento. Por qué se agrega un ‘0’ al cambiar de Número a Texto.

@ImkeF @Zubair_Muhammad – Alguna idea

Gracias,

Ankit Jain

Deja un comentario

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