Pregunta

Obtuve este método, ¿cómo puedo hacer el decimal a .00 y no a .0000?

    public static List<Product> GetAllProducts()
{
    List<Product> products = new List<Product>();
    string sqlQuery = "SELECT * FROM Products";
    using (SqlConnection connection = new SqlConnection(connectionString))
    {
        using (SqlCommand command = new SqlCommand(sqlQuery, connection))
        {
            connection.Open();

            using (SqlDataReader reader = command.ExecuteReader(CommandBehavior.CloseConnection))
            {
                while (reader.Read())
                {
                    Product product = new Product();
                    product.Id = Convert.ToInt32(reader["Id"]);
                    product.ManufacturerId = Convert.ToInt32(reader["ManufacturerId"]);
                    product.CategoryId = Convert.ToInt32(reader["CategoryId"]);
                    product.Name = (reader["Name"]).ToString();
                    product.Description = (reader["Description"]).ToString();
                    product.Price = Convert.ToDecimal(reader["Price"]);
                    product.ItemsInStock = Convert.ToInt32(reader["ItemsInStock"]);

                    products.Add(product);
                }
            }
        }
    }
    return products;
}

ACTUALIZACIÓN: Lo siento por hacer preguntas estúpidas. No puedo ver dónde colocar el DataFormatString = " {0: F2} "

Esta es mi cuadrícula:

            <asp:TemplateField HeaderText="Price" SortExpression="Price">
                <EditItemTemplate>
                    <asp:TextBox ID="PriceTextBox" runat="server" Text='<%# Bind("Price") %>'></asp:TextBox>
                </EditItemTemplate>
                <ItemTemplate>
                    <asp:Label ID="PriceLabel" runat="server" Text='<%# Bind("Price") %>'></asp:Label>
                </ItemTemplate>
            </asp:TemplateField>
¿Fue útil?

Solución

No has mostrado dónde estás mostrando estos. Todo lo que tenemos es una celda de base de datos y un objeto en la memoria, ambos de los cuales son meramente de almacenamiento. Para fines de almacenamiento, .00 y .0000 son lo mismo. Intentar traducir de uno a otro es un desperdicio de recursos. Muéstrenos dónde le muestra esto al usuario y le ayudaremos a formatearlo como desee.

También, como preferencia personal, escribiría ese código así:

private static ToProduct(this IDataRecord record)
{
    var product = new Product();
    product.Id = record.GetInt32(record.GetOrdinal("Id"));
    product.ManufacturerId = record.GetInt32(record.GetOrdinal("ManufacturerId"));
    product.CategoryId = record.GetInt32(record.GetOrdinal("CategoryId"));
    product.Name = record.GetString(record.GetOrdinal("Name"));
    product.Description = record.GetString(record.GetOrdinal("Description"));
    product.Price = record.GetDecimal(record.GetOrdinal("Price"));
    product.ItemsInStokc = record.GetInt32(record.GetOrdinal("ItemsInStock"));
    return product;
}

public static IEnumerable<Product> GetAllProducts()
{
    string sqlQuery = "SELECT * FROM Products";
    using (SqlConnection connection = new SqlConnection(connectionString))
    using (SqlCommand command = new SqlCommand(sqlQuery, connection))
    {
        connection.Open();

        using (SqlDataReader reader = command.ExecuteReader(CommandBehavior.CloseConnection))
        {
            while (reader.Read())
            {
                yield return reader.ToProduct();
            }
        }
    }
}

Actualización:
Comentaste que esto estará en un GridView. Bueno. En ese caso, todo lo que necesita hacer es tener un DataFormatString en la definición de la columna, como esto:

<asp:GridView runat="server" id="TestView" ... >
    <Columns>
        <asp:BoundField DataFormatString="{0:F2}"  />
        ...
    </Columns>
</asp:GridView>    

Otros consejos

1234m.ToString (" 0,00 ")

Al imprimir Product.Price, use .ToString (" N2 "). Lo que podría desear es la expresión de moneda completa, que es .ToString (" C "). Aquí hay un enlace de referencia para todas las cadenas de formato:

http://msdn.microsoft.com/en-us/library /dwhawy9k.aspx

Bueno, obviamente no podrías hacer lo siguiente

product.Price = Convert.ToDecimal(reader["Price"]).ToString("0.00");

ya que devolvería una cadena. Aunque puedes hacer esto:

product.Price = Convert.ToDecimal(reader["Price"].ToString("0.00"));

Esto parece la forma más lógica de completar esta operación.

¿Te preocupa la configuración cultural?

Echa un vistazo a este enlace msdn: http://msdn.microsoft.com/en-us/library/dwhawy9k. aspx

Esperemos que te ayude.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top