PowerToys PT-运行计算器:禁用输入的数字格式

50few1ms  于 6个月前  发布在  其他
关注(0)|答案(8)|浏览(54)

新功能/增强功能的描述

添加一个切换按钮,用于禁用输入数字的格式要求,这样我们就可以使用类似123,456.78和123 456,78这样的数字。请注意,小数部分的句点和逗号是可互换的。

何时会使用这个功能?

我是一个拥有英俄双语键盘布局和英文区域格式的人。因此,当我从数字小键盘输入数字时,如果我要输入"123.45",或者"123,45",那么就会分别以英文和小数格式进行浮点数格式化。这就是提议的功能所在,为用户提供一个切换按钮,禁用格式化,将"2.5"和"2,5"视为"两半",而不是"两半"和"二十五"。

支持信息

相关但无解的问题:#12121#13562#25285

oipij1gg

oipij1gg1#

更新:我开始调试,问题似乎出在NumberTranslator类上(在这里被使用),它将数字格式化为与所选区域设置相符的格式,而不仅仅是像我最初想的那样,仅由CalculateEngine处理。因此,我的测试数字123.4567,89在main.cs中创建var input后读作123.456789。实际上,我不确定如何在不关闭计算器模块的“翻译到区域设置”系统的情况下解决这个问题,我认为这个功能是出于某种原因而存在的。

tp5buhyn

tp5buhyn2#

@evinnichenko
有一个插件设置可以选择你需要的英文或区域输入格式。(PT设置 > PowerToys运行 > 插件 > 计算器插件 > 展开插件设置)
同时支持两者是一个问题,因为我们不知道用户是想要小数分隔还是千位分隔。

zbsbpyhn

zbsbpyhn3#

@htcfreek,这确实是个问题。你提到的设置会覆盖本地数字格式,强制使用en-US(即要求123,456.789而不是例如123 456,789)。我的电脑已经设置了en-US数字格式,所以无论布局如何,所有数字都以,作为千位分隔符,以.作为小数分隔符。问题是,在RU布局中,.与不同的键绑定(在ANSI中为.>,在俄语中为/?,逗号也从,<移动到Shift + /?),而numpad的.发送的是,,因此,无论是否启用该设置,在使用肌肉记忆输入小数时,如果错误地切换了语言,将导致错误的数字格式和计算器失败。我的建议是给用户另一个选项,与你正在谈论的相反,完全忽略格式设置,并利用Mages显然可以不带千位分隔符读取数字的事实。可能通过在Main.cs的第99行左右更改input,以及与其他依赖标志的操作一起进行,然后将其发送给Mages来实现。
说到这个,你知道在哪里可以找到a)如何正确设置选项标志(找不到用于输入自己描述的区域设置文件,可以使用正式的过程来完成它)以及b)如何在调试启动时从VS中修复一连串的“无法加载XXX.dll”警告窗口吗?

oaxa6hgo

oaxa6hgo4#

要解决这个问题,以便在所有区域设置中都能正常工作,而不受语言对的影响,可以考虑修改GetSplitRegex()方法,使其能够适应所有区域设置。但是,由于这可能会影响其他用户,即使这个标志是可选的,所以需要谨慎操作。

首先,可以尝试获取当前系统的区域设置,然后根据区域设置来调整GetSplitRegex()方法。例如:

using System.Globalization;

// ...

private static Regex GetSplitRegex(CultureInfo culture)
{
    // 根据culture获取默认的分隔符正则表达式
    Regex defaultSplitRegex = new Regex("[^\d]");

    // 根据culture获取适当的小数分隔符和千位分隔符
    string decimalSeparator = culture.NumberFormat.CurrencyDecimalSeparator;
    string groupSeparator = culture.NumberFormat.CurrencyGroupSeparator;

    // 如果当前区域设置的小数分隔符和千位分隔符与默认值相同,则直接返回默认的分隔符正则表达式
    if (decimalSeparator == "," && groupSeparator == ".")
    {
        return defaultSplitRegex;
    }

    // 否则,根据当前区域设置的小数分隔符和千位分隔符构建新的分隔符正则表达式
    Regex customSplitRegex = new Regex($"[{groupSeparator}{decimalSeparator}]");

    return customSplitRegex;
}

这样,当调用GetSplitRegex()方法时,它将根据当前系统的区域设置来选择适当的分隔符正则表达式。这应该可以在大多数情况下解决问题,但可能仍然需要针对某些特殊情况进行调整。

btqmn9zl

btqmn9zl5#

感谢你关注这个问题。我认为如果我们能找到一个解决方案,使其变得智能化,这将是一个很大的质量提升。
目前我看不到你在最后一条评论中的问题?有什么你需要了解的吗?否则我建议你创建/打开一个草稿PR,这样我们都可以看到。

i34xakig

i34xakig6#

关于如何最好地解决这个问题,在其他人看来,目前我的解决方案只适用于特定的对(ru-en是其中之一),而不是所有像我希望的那样。在那之前,我发现你可以设置自定义分隔符,这样你的数字就可以看起来像1-234\5=1,234.5。
是的,现在我会打开PR,即使我认为它还没有完全准备好。

xdyibdwo

xdyibdwo7#

这与"使用英文格式"的设置密切相关,我担心这仍然会很复杂。

3qpi33ja

3qpi33ja8#

相关但相反。"使用英文格式"强制你无论在哪个地区都使用en-US数字格式,而这旨在允许你使用任何符号来自任何地区,以防你掌握第二语言并用它来输入计算机所在地区的数字。

相关问题