CultureInfo的NumberFormat.PercentPositivePattern在我的Windows 10计算机上已更改

问题描述 投票:2回答:1

当硒在本地计算机上测试.net核心应用程序时,我注意到我的百分比字符串(.ToString("p2"))表示数字和%之间没有空格,这与测试服务器的页面不同。经过研究后,似乎文化信息已在我的Windows 10机器上进行了更改。有谁知道如何将其重置为默认值?或更改设置?

get-culture

LCID             Name             DisplayName
----             ----             -----------
1033             en-US            English (United States)


(get-culture).NumberFormat

CurrencyDecimalDigits    : 2
CurrencyDecimalSeparator : .
IsReadOnly               : True
CurrencyGroupSizes       : {3}
NumberGroupSizes         : {3}
PercentGroupSizes        : {3}
CurrencyGroupSeparator   : ,
CurrencySymbol           : $
NaNSymbol                : NaN
CurrencyNegativePattern  : 0
NumberNegativePattern    : 1
PercentPositivePattern   : 1
PercentNegativePattern   : 1
NegativeInfinitySymbol   : -∞
NegativeSign             : -
NumberDecimalDigits      : 2
NumberDecimalSeparator   : .
NumberGroupSeparator     : ,
CurrencyPositivePattern  : 0
PositiveInfinitySymbol   : ∞
PositiveSign             : +
PercentDecimalDigits     : 2
PercentDecimalSeparator  : .
PercentGroupSeparator    : ,
PercentSymbol            : %
PerMilleSymbol           : ‰
NativeDigits             : {0, 1, 2, 3…}
DigitSubstitution        : None

[PercentPositivePattern&PercentNegativePattern设置为1而不是0。而且,当其他框显示为false时,IsReadOnly似乎为true。

检查了我的地区信息。一切看起来都正确。

windows powershell cultureinfo
1个回答
0
投票

事实上,在Windows 10中(或至少在Windows 7之后的某个时刻,en-US文化中的百分比格式已更改:]

Windows 7:

PS> (1).ToString("p2")
100.00 %  # Space between number and "%"

Windows 10版本1903:

PS> (1).ToString("p2")
100.00%   # NO space between number and "%"

要恢复旧的行为仅对当前线程有效(不是全局的,不是持久的),可以执行以下操作:

$c = [cultureinfo]::CurrentCulture.Clone()  # Clone the current culture.
$c.NumberFormat.PercentPositivePattern = 0  # Select the old percentage format.
$c.NumberFormat.PercentNegativePattern = 0  # For negative percentages too.
[cultureinfo]::CurrentCulture = $c  # Make the cloned culture the current one.

此后,(1).Tostring('p2')再次产生100 %

注意:在Windows PowerShell / .NET Framework中,您还可以修改[cultureinfo]::CurrentCulture 直接的属性(无需克隆)。虽然这简化了解决方案,但请注意PowerShell Core / .NET Core不再支持它

# Windows PowerShell / .NET Framework (as opposed to  .NET Core) ONLY
PS> [CultureInfo]::CurrentCulture.NumberFormat.PercentPositivePattern = 0; (1).ToString("p2")
100.00 %
© www.soinside.com 2019 - 2024. All rights reserved.