C#将货币字符串转换为Double

时间:2014-01-03 22:01:15

标签: c# string casting double currency

我对C#和.NET Framework有基本的了解,我已经获得了建立POS(销售点)屏幕的任务,我目前正在尝试将货币相关字符串转换回小砖墙一双。

我在屏幕上有两个列表框和几个产品按钮,按钮使用提供给我们的库类填充(基本上显示我们可以使用组件)

一个列表框保存产品名称,而另一个列表框保存该产品的价格,当选择产品按钮时,它从按钮文本中获取产品名称,并在其标记内有价格添加到列表框中价格。

我的问题是我想在列表框中显示价格作为货币也显示所有'0'我可以通过执行以下操作来做到这一点

value.ToString("C");
string.Format("{0:C}",value);

或使用转换等

虽然因为我想这样做,如果我想通过双击从列表中删除一个项目我需要从总数中拿走价格所以我需要转换回到双倍,尽管因为它的当前格式我得到尝试执行该操作时出现错误我已经环顾四周,我似乎无法在其周围找到它,我能看到的唯一选择就是保留字符串值,而不是将其转换为货币格式。

the ERROR: {"Input string was not in a correct format."}

代码段

 private void panelBtns_Click(object sender, EventArgs e)
    {
        Button panelBtn = (Button)sender;

        lstProduct.Items.Add(panelBtn.Text);

        double price = Convert.ToDouble(panelBtn.Tag);

        >>CURRENCY FORMAT>> lstPrice.Items.Add(string.Format("{0:C}",price));

        dblTotal = dblTotal + Convert.ToDouble(panelBtn.Tag);

        lblTotal.Text = string.Format("{0:C}", dblTotal);

        lblOutput.Text = "0";

        lblOutput.Tag = "0";
    }//End Panel Buttons 



 private void lstProduct_DoubleClick(object sender, EventArgs e)
    {
        int index = lstProduct.SelectedIndex;

        lstPrice.SelectedIndex = lstProduct.SelectedIndex ;

       >> ERROR HERE >> double price = Convert.ToDouble(lstPrice.GetItemText(lstPrice.SelectedItem));

        dblTotal = dblTotal - price; 

        lstProduct.Items.RemoveAt(index);

        lstPrice.Items.RemoveAt(index);

        lblTotal.Text = string.Format("{0:C}", dblTotal);

    }

有没有人知道我怎么可能解决这个问题,我曾经创建了一个不可见的列表来存储标签的实际值,所以我可以稍后使用它,但是还有其他任何方法吗?

注意:我也知道使用double for currency不是一个非常可靠的

3 个答案:

答案 0 :(得分:9)

解析C格式的最简单方法可能是

Double.Parse(text, System.Globalization.NumberStyles.Currency)

当然,您总是希望使用Decimal来处理货币,而Decimal.Parse会使用相同的参数。

在这种情况下,您可能希望存储内部数值及其文本表示,而不是转换为字符串然后解析回数字。

答案 1 :(得分:0)

其他方式,但请注意,如果删除符号仅提供十进制字符串,则必须尝试所有文化,使用Gabe的答案(在我之前发布:D)

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

using System.Globalization;
using System.Threading;

namespace ConsoleApplication6
{
    class Program
    {
        static void Main(string[] args)
        {
            //US-en culture / default I'm developing on
            string currencyString = "$12.99"; //assuming got from: lstPrice.GetItemText(lstPrice.SelectedItem);
            CultureInfo ci = Thread.CurrentThread.CurrentUICulture;
            double d = Convert.ToDouble(currencyString.Replace(ci.NumberFormat.CurrencySymbol, ""));

            //using custom culture
            currencyString = "12.99zł";
            ci = CultureInfo.GetCultureInfo("PL-pl");
            d = Convert.ToDouble(currencyString.Replace(ci.NumberFormat.CurrencySymbol, ""));

        }
    }
}

答案 2 :(得分:0)

您可能还希望使用 Math.Round方法

来分配小数

https://msdn.microsoft.com/en-us/library/system.math.round(v=vs.110).aspx