Saltar al contenido

C# Convertir decimal a string con formato específico

Contamos con la contestación a este inconveniente, al menos eso creemos. Si presentas inquietudes dínoslo, que sin dudarlo te responderemos

Solución:

decimal a = 12;
var b = a.ToString("N1"); // 12.0

a = 1.2m;
b = a.ToString(); // 1.2

a = 101m;
b = a.ToString("N10"); // 101.0000000000

a = 1.234m;
b = a.ToString("N10"); // 1.2340000000

Para la segunda parte de su pregunta, donde desea una longitud total de 10, entonces:

decimal a = 1.234567891m;
int numberOfDigits = ((int)a).ToString().Length;
var b = a.ToString($"N9 - numberOfDigits"); //1.23456789

//Or before C# 6.0
var b = a.ToString("N" + (9 - numberOfDigits)); //1.23456789

Básicamente ((int)number).ToString().Length le da la cantidad de dígitos antes de la . (convertir a int eliminará las fracciones) y luego reducir eso del número de dígitos después del . (y también -1 para el propio punto decimal)

Puedes usar .ToString() para hacer esta tarea:

decimal aDecimalVal = 10.234m;
string decimalString = aDecimalVal.ToString("#.000"); // "10.234"
aDecimalVal.ToString("#.00"); // "10.23"
aDecimalVal.ToString("#.0000"); // "10.2340"

El número de 0 después de la . en el formato string decidirá el número de lugares en el decimal string.

Actualizaciones: Entonces, desea encontrar la cantidad de dígitos después de los puntos decimales, por lo que los cambios en el código serán como los siguientes:

decimal aDecimalVal = 10.2343455m;
int count = BitConverter.GetBytes(decimal.GetBits(aDecimalVal)[3])[2];
string formatString = String.Format("N0",count.ToString());
string decimalString = aDecimalVal.ToString(formatString); // "10.2343455"

Puntuaciones y reseñas

Si conservas alguna sospecha y capacidad de arreglar nuestro división eres capaz de ejecutar una referencia y con placer lo analizaremos.

¡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 *