使用几行代码处理整个程序的小数分隔符(逗号和点)

时间:2015-04-05 19:01:39

标签: c# decimal regional-settings

我试图让我的程序更兼容,因为我最终改变了许多小东西,例如,

使用textBox.Text = Convert.ToString(value)代替= "value"

获取当前用户小数分隔符并在replace

上使用tryparse
char sepdec = Convert.ToChar(CultureInfo.CurrentCulture.NumberFormat.NumberDecimalSeparator);

float.TryParse(str.Replace(",", sepdec.ToString()).Replace(".", sepdec.ToString()), out testvariable;

但是,当您已经编写了大部分程序时,这些解决方案很难实现,而不必担心它。

因此,我试图找到使整个代码兼容的方法,而无需编辑每个tryparse和每个textbox

我试图做以下事情:

//Get the current user decimal separator before the program initializes
char sepdec = Convert.ToChar(CultureInfo.CurrentCulture.NumberFormat.NumberDecimalSeparator);

//Create a current culture clone and change the separator to whatever the user has in his regional options, before the initializing the component

  public Form1()
  {
  System.Globalization.CultureInfo customCulture = (System.Globalization.CultureInfo)System.Threading.Thread.CurrentThread.CurrentCulture.Clone();
  customCulture.NumberFormat.NumberDecimalSeparator = sepdec.ToString();

  System.Threading.Thread.CurrentThread.CurrentCulture = customCulture;

  InitializeComponent();
  }

但是我已经对此进行过测试,而且它并没有真正做任何事情。是不是应该让程序理解ok, now you use dot as your decimal separator altough you have values in textBox as "2,5"

1 个答案:

答案 0 :(得分:1)

  

好的,现在你使用点作为小数点分隔符,尽管你有值   在textBox中作为" 2,5"

完全。

float.TryParse方法会使用您的CurrentCulture设置,如果您不使用任何IFormatProvider

如果您尝试将"2,5"解析为没有IFormatProvider的{​​{1}},则CurrentCulture必须,NumberDecimalSeparator

如果您尝试将"2.5"解析为浮点数,则可以使用文化作为已有的另一个参数。作为NumberDecimalSeparator(例如InvariantCulture),或者您可以.Clone() CurrentCulture(正如您所做的那样)并将其NumberDecimalSeparator属性设置为{ {1}}并将此克隆文化用作float.TryParse overload中的另一个参数。