2

我正在读取一个包含值的 XML 文件。当我读到它们时,它们是字符串。

因此,当我尝试将它们转换为DoubleDecimal点消失时。

decimal dec = Convert.ToDecimal("3.1922");             
MessageBox.Show(dec.ToString()); // 31922

我究竟做错了什么?

4

4 回答 4

4

这和你现在的文化有关

decimal dec = Convert.ToDecimal("3.1922",CultureInfo.CreateSpecificCulture("de-DE"));
MessageBox.Show(dec.ToString()); //31922

dec = Convert.ToDecimal("3.1922", CultureInfo.CreateSpecificCulture("en-US"));
MessageBox.Show(dec.ToString()); //3.1922

dec = Convert.ToDecimal("3,1922", CultureInfo.CreateSpecificCulture("de-DE"));
MessageBox.Show(dec.ToString()); //3.1922
于 2012-10-28T14:53:00.870 回答
1

在您当前的文化.中用作千位分隔符。您可以通过以下方式验证它:

var culture = Thread.CurrentThread.CurrentCulture;
var numberFormat = culture.NumberFormat;
string groupSeparator = numberFormat.NumberGroupSeparator; // will be .
string decimalSeparator = numberFormat.NumberDecimalSeparator; // will be ,

您可以为解析指定所需的文化:

decimal dec = Decimal.Parse("3.1922", new CultureInfo("en-US"));

或者您可以将您的文化设置为当前:

Thread.CurrentThread.CurrentCulture = new CultureInfo("en-US");
decimal dec = Decimal.Parse("3.1922");
于 2012-10-28T14:51:15.103 回答
0

检查您的 NumberFormat.NumberDecimalSeparator。

于 2012-10-28T14:54:44.817 回答
-2

首先将这些代码添加到public form1() after InitializeComponent();

public Form1()
    {
        InitializeComponent();
        System.Threading.Thread.CurrentThread.CurrentUICulture = new System.Globalization.CultureInfo("en-US");
        System.Threading.Thread.CurrentThread.CurrentCulture = new System.Globalization.CultureInfo("en-US");
    }

然后在任何你想要的地方使用你的代码:

decimal dec = Convert.ToDecimal("3.1922");
        MessageBox.Show(dec.ToString());

更新 :

如果您不希望全局更改,则应在显示小数之前添加代码。

private void ShowDecimal_Click(object sender, EventArgs e)
    {
        System.Threading.Thread.CurrentThread.CurrentUICulture = new System.Globalization.CultureInfo("en-US");
        System.Threading.Thread.CurrentThread.CurrentCulture = new System.Globalization.CultureInfo("en-US");
        decimal dec = Convert.ToDecimal("3.1922");
        MessageBox.Show(dec.ToString());
    }

更新 2:

decimal dec = Decimal.Parse("3.1922", new CultureInfo("en-US"));
MessageBox.Show(dec.ToString());
于 2012-10-28T14:59:48.263 回答