从字符串中解析小数

时间:2015-11-01 22:55:15

标签: c# asp.net trim

我在网络表单上有一个下拉列表,其中包含项目名称和与之关联的价格(用户无法看到)。我使用selecteditem.Text和selectedvalue来捕获项目名称和价格。为了对抗selectedvalue的重复条目,我正在存储类似的条目

  

签署上限10.0
  签名手套10.1
  签名衬衫10.2
  蝙蝠剃须.50
  帽子边缘.50

然后使用下面的

解析出来
String[] str = dropdownlist1.SelectedValue.ToString().Split('.');
String itemprice = str[0].Trim();

我的语法效果很好,除了十进制值!在蝙蝠剃须和帽檐上我需要保留小数值!我应该改变什么,或者我应该如何设置我的语法以允许重复的选定值或保留小数?我明白使用str [0]是导致我丢失小数的原因,但是我如何解决它需要保留的2个(可能更多的未来)场景圆通?

3 个答案:

答案 0 :(得分:0)

您可以拆分空格,并始终使用linq:

获取最后一个条目
dropdownlist1.SelectedValue.ToString().Split(' ').Last();

请注意,您应该使用隐藏的ItemId作为selectedvalue,而不是项目名称和价格,并使用以下查找表:

ItemId|Name|Price
1|Hat|.50
2|Bat Shavings|.50
...

提交选定的ID后,您可以更直接地查找名称和价格。此外,隐藏在表单中的价格并不会阻止用户操纵价格。

答案 1 :(得分:0)

很难从您的帖子中了解如何获取数据,但我会将数据从数据库加载到数据对象中,然后将该对象绑定到下拉列表。

以下是我用于存储数据库中数据的库存类:

public class Inventory
{
    public int ProductID { get; set; }
    public string ProductDescription { get; set; }
    public decimal ProductPrice { get; set; }

    public Inventory(int ID, string Description, decimal Price)
    {
        this.ProductID = ID;
        this.ProductDescription = Description;
        this.ProductPrice = Price;
    }

    public string DDLValue
    {
        get
        {
            return string.Format("{0}|{1}|{2}", ProductID, ProductDescription, ProductPrice);
        }
    }

    public string DDLText
    {
        get
        {
            return string.Format("{0} [{1}]", ProductDescription, ProductPrice.ToString("C"));
        }
    }
}

以下是如何配置页面控件的示例:

<asp:DropDownList ID="ddlProducts" runat="server" DataValueField="DDLValue" DataTextField="DDLText" />

在后面的页面代码中,将数据加载到下拉列表中:

protected void LoadProductsFromDatabase()
    {
        System.Collections.Generic.List<Inventory> My_DDL_Datasource = new System.Collections.Generic.List<Inventory>();

        // write your code to pull database values
        // populating list with sample data for stackoverflow
        // make sure to use a replace statement to remove any delimiter characters that may be in the description
        My_DDL_Datasource.Add(new Inventory(1, "Product 1".Replace("|", ""), 0.50m));
        My_DDL_Datasource.Add(new Inventory(2, "Product 2".Replace("|", ""), 1.50m));
        My_DDL_Datasource.Add(new Inventory(3, "Product 3".Replace("|", ""), 0.50m));
        My_DDL_Datasource.Add(new Inventory(4, "Product 4".Replace("|", ""), 10.50m));

        ddlProducts.DataSource = My_DDL_Datasource;
        ddlProducts.DataBind();
    }

在后面的页面代码中,创建一个方法来获取下拉列表选择值:

protected Inventory GetSelectedProduct()
    {
        try
        {
            if (ddlProducts.Items.Count == 0)
            {
                // do nothing, fall thru will return null
            }
            else
            {
                string[] DDLValue = ddlProducts.SelectedValue.Split('|');

                int ivalue = 0;
                int.TryParse(DDLValue.GetValue(0).ToString(), out ivalue);

                decimal dvalue = 0.00m;
                decimal.TryParse(DDLValue.GetValue(2).ToString(), out dvalue);

                // only return object if the productid and product price were successfully parsed.
                // this logic assumes no products are free
                if (ivalue > 0 && dvalue > 0.00m)
                {
                    return new Inventory(ivalue, DDLValue.GetValue(1).ToString(), dvalue);
                }
            }
        }
        catch { }
        return null;
    }

在后面的网页代码中,使用您选择的值执行某些操作:

protected void DoSomethingWithValue()
    {
        Inventory MyInventoryItem = GetSelectedProduct();

        if (MyInventoryItem != null)
        {
            // selected item successfully parsed
            // do something with it.

            Response.Write(
                string.Format("Your selected product:<br />{0}<br />UniqueID: {1}<br />Price: {2}",
                Server.HtmlEncode(MyInventoryItem.ProductDescription),
                MyInventoryItem.ProductID,
                MyInventoryItem.ProductPrice.ToString("C")
            ));
        }
        else
        {
            // error parsing information stored in drop down list value
        }
    }

答案 2 :(得分:0)

您需要从字符串中删除/替换所有字母字符,并且只保留数字。

once