ASP.NET/C#十进制到0.00

时间:2009-10-23 18:05:38

标签: c# asp.net decimal

我有这个方法,如何将小数点设为.00而不是.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;
}

更新: 很抱歉提出愚蠢的问题。 我看不到放置DataFormatString =“{0:F2}”

的位置

这是我的网格:

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

5 个答案:

答案 0 :(得分:5)

1234m.ToString( “0.00”)

答案 1 :(得分:4)

您尚未显示显示这些内容的位置。我们所拥有的只是数据库单元和内存中的对象,这两者都只是存储。出于存储目的,.00.0000 相同。尝试从一个转换为另一个是浪费资源。向我们展示您向用户显示此内容的位置,我们将根据您的需要帮助您格式化。

另外,作为个人喜好,我会写下这样的代码:

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

<强>更新
您评论说这将在GridView中。好的。在这种情况下,您需要做的只是在列定义中有DataFormatString,如下所示:

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

答案 2 :(得分:1)

打印Product.Price时,请使用.ToString(“N2”)。您可能需要的是完整货币表达式,即.ToString(“C”)。以下是所有格式字符串的参考链接:

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

答案 3 :(得分:0)

很明显你不能做下面的事情

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

因为它会返回一个字符串。虽然你可能会这样做:

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

这似乎是完成此操作的最合理方式。

答案 4 :(得分:0)

您是否担心文化背景?

查看此msdn链接: http://msdn.microsoft.com/en-us/library/dwhawy9k.aspx

希望能帮到你。