Question

J'ai cette méthode, comment puis-je faire passer le nombre décimal à .00 et non à .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;
}

UPDATE: Désolé de poser des questions stupides. Je ne vois pas où placer le DataFormatString = "{0: F2}"

Ceci est ma grille:

            <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>
Était-ce utile?

La solution

Vous n'avez pas indiqué où vous les affichez. Tout ce que nous avons est une cellule de base de données et un objet en mémoire, qui ne sont que du stockage. Pour des raisons de stockage, .00 et .0000 sont la même chose. Essayer de traduire de l’un en l’autre est un gaspillage de ressources. Montrez-nous où vous affichez ceci à l'utilisateur, et nous vous aiderons à le formater comme vous le souhaitez.

De plus, en tant que préférence personnelle, j'écrirais ce code comme suit:

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();
            }
        }
    }
}

Mise à jour:
Vous avez commenté que ce sera dans un GridView. D'accord. Dans ce cas, tout ce que vous avez à faire est d’avoir un DataFormatString dans la définition de colonne, comme ceci:

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

Autres conseils

1234m.ToString ("0,00")

Lorsque vous imprimez Product.Price, utilisez .ToString ("N2"). Ce que vous voudrez peut-être, c’est l’expression de la devise complète, qui est .ToString ("C"). Voici un lien de référence pour toutes les chaînes de format:

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

Bien évidemment, vous ne pouviez pas faire ce qui suit

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

comme il retournerait une chaîne. Bien que vous puissiez faire cela:

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

Cela semble être le moyen le plus logique de terminer cette opération.

Êtes-vous préoccupé par les paramètres de la culture?

Découvrez ce lien msdn: http://msdn.microsoft.com/en-us/library/dwhawy9k. aspx

J'espère vous donner un coup de main.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top