我试图让我的程序更兼容,因为我最终改变了许多小东西,例如,
使用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"
?
答案 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中的另一个参数。