小编ng8*_*92b的帖子

使 TryParse 与逗号或点小数分隔符兼容

问题:让我们假设您正在使用一个点“。” 作为区域设置中的小数点分隔符,并用逗号对字符串进行编码。

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前提。

我会解决这个问题,如果有人有更多提示,欢迎

c# decimal tryparse regional-settings

18
推荐指数
2
解决办法
2万
查看次数

使用Regex.Replace来保留可以变化的字符

我有以下内容:

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(",",".")做不到

c# regex replace

4
推荐指数
1
解决办法
1125
查看次数

是否可以使用Convert.ToInt32(double)并使其选择最小值?

是否可以使用Convert.ToInt32(double)并使其选择最小值?

我已经阅读了msdn中的示例,它使用最接近的值将double转换为int,这意味着如果我有一个等于2.9的double,它会将int设置为3.

是否可以使用convert.toint32并使用2?

c# double int32

1
推荐指数
1
解决办法
102
查看次数

创建一个空的点数组

我正在尝试创建一个空的数组点,因为我正在使用以下内容

    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)

我遇到了一些麻烦,因为我无法创建一个空的点数组.我可以使用列表创建一个空的字符串数组,但由于我需要两个元素,因此列表在这里没用.

任何提示?(也欢迎提出问题的提示)

c# arrays points

0
推荐指数
1
解决办法
885
查看次数

通过按键禁用在文本框上粘贴

我已将以下方法分配给我的所有

    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)

它基本上允许一个小数分隔符(任何类型),并且只允许数字。我宁愿在这种方法上禁用“粘贴”。这可能吗?

我知道有些用户可能会将我重定向到这里

如何使用 C# 禁用文本框上的复制、粘贴和删除功能

但我的代码无法识别e.Controle.KeyCode. 即使我using Windows.Forms在表单开头添加。即便如此,我也不知道这些解决方案是否有效。

c# keypress

0
推荐指数
1
解决办法
2046
查看次数

标签 统计

c# ×5

arrays ×1

decimal ×1

double ×1

int32 ×1

keypress ×1

points ×1

regex ×1

regional-settings ×1

replace ×1

tryparse ×1