问题:让我们假设您正在使用一个点“。” 作为区域设置中的小数点分隔符,并用逗号对字符串进行编码。
string str = "2,5";
当你decimal.TryParse(str, out somevariable);它时会发生什么?
somevariable 将假设为 0。
你能做些什么来解决它?
1-你可以
decimal.TryParse(str, NumberStyles.Any, CultureInfo.InvariantCulture, out somevariable);
Run Code Online (Sandbox Code Playgroud)
它会返回 25,而不是 2.5,这是错误的。
2-你可以
decimal.TryParse(str.Replace(",","."), out num);
Run Code Online (Sandbox Code Playgroud)
它会返回正确的值,但是,如果用户","用作小数点分隔符,它将不起作用。
我无法使其工作的可能解决方案:
在区域设置中获取用户小数点分隔符:
char sepdec = Convert.ToChar(CultureInfo.CurrentCulture.NumberFormat.NumberDecimalSeparator);
Run Code Online (Sandbox Code Playgroud)
并以某种方式替换 from ",",sepdec,这样如果它是逗号,它将保留一个逗号,如果用户使用点,则用实际的点替换。
提示?
编辑:很多网友发帖有用的信息,最近,使用参数NumberStyles.Any, CultureInfo.GetCultureInfo("pt-PT")上tryParse是行不通的,如果你的分隔符设置为“”所以它几乎犯规作出的TryParse‘通用’的fullfill前提。
我会解决这个问题,如果有人有更多提示,欢迎
我有以下内容:
string text = "version=\"1,0\"";
Run Code Online (Sandbox Code Playgroud)
我想替换comma为a dot,同时保持1和0,但要记住它们在不同的情况下是不同的!它可能是version="2,3".
自作聪明和noob-unworking方式做到这一点将是:
for (int i = 0; i <= 9; i++)
{
for (int z = 0; z <= 9; z++)
{
text = Regex.Replace(text, "version=\"i,z\"", "version=\"i.z\"");
}
}
Run Code Online (Sandbox Code Playgroud)
但是当然..它是一个字符串,我不想要i并且z在那里表现为字符串.
我也可以尝试跛脚但工作方式:
text = Regex.Replace(text, "version=\"1,", "version=\"1.");
text = Regex.Replace(text, "version=\"2,", "version=\"2.");
text = Regex.Replace(text, "version=\"3,", "version=\"3.");
Run Code Online (Sandbox Code Playgroud)
等等..但它会很蹩脚.
有关如何单手处理此问题的任何提示?
编辑:我有其他逗号,我不想替换,所以text.Replace(",",".")做不到
是否可以使用Convert.ToInt32(double)并使其选择最小值?
我已经阅读了msdn中的示例,它使用最接近的值将double转换为int,这意味着如果我有一个等于2.9的double,它会将int设置为3.
是否可以使用convert.toint32并使用2?
我正在尝试创建一个空的数组点,因为我正在使用以下内容
Point[] listapontos = new[]; //should create a empty point array for later use but doesn't.
Point ponto = new Point(); //a no coordinates point for later use
for (int i = 1; i <= 100; i++) //cycle that would create 100 points, with X and Y coordinates
{
ponto.X = i * 2 + 20;
ponto.Y = 20;
listapontos[i] = ponto;
}
Run Code Online (Sandbox Code Playgroud)
我遇到了一些麻烦,因为我无法创建一个空的点数组.我可以使用列表创建一个空的字符串数组,但由于我需要两个元素,因此列表在这里没用.
任何提示?(也欢迎提出问题的提示)
我已将以下方法分配给我的所有
private void textBox18_KeyPress_1(object sender, KeyPressEventArgs e)
{
char a = Convert.ToChar(CultureInfo.CurrentCulture.NumberFormat.NumberDecimalSeparator);
if (!char.IsControl(e.KeyChar) && !char.IsDigit(e.KeyChar) &&
(e.KeyChar != a))
{
e.Handled = true;
}
// only allow one decimal point
if ((e.KeyChar == a) && ((sender as TextBox).Text.IndexOf(a) > -1))
{
e.Handled = true;
}
}
Run Code Online (Sandbox Code Playgroud)
它基本上允许一个小数分隔符(任何类型),并且只允许数字。我宁愿在这种方法上禁用“粘贴”。这可能吗?
我知道有些用户可能会将我重定向到这里
但我的代码无法识别e.Control和e.KeyCode. 即使我using Windows.Forms在表单开头添加。即便如此,我也不知道这些解决方案是否有效。