我正在读取一个包含值的 XML 文件。当我读到它们时,它们是字符串。
因此,当我尝试将它们转换为Double
或Decimal
点消失时。
decimal dec = Convert.ToDecimal("3.1922");
MessageBox.Show(dec.ToString()); // 31922
我究竟做错了什么?
我正在读取一个包含值的 XML 文件。当我读到它们时,它们是字符串。
因此,当我尝试将它们转换为Double
或Decimal
点消失时。
decimal dec = Convert.ToDecimal("3.1922");
MessageBox.Show(dec.ToString()); // 31922
我究竟做错了什么?
这和你现在的文化有关
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
在您当前的文化.
中用作千位分隔符。您可以通过以下方式验证它:
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");
检查您的 NumberFormat.NumberDecimalSeparator。
首先将这些代码添加到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());