当硒在本地计算机上测试.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。
检查了我的地区信息。一切看起来都正确。
答案 0 :(得分:1)
实际上,在最新版本的Windows 10中,en-US
文化中的百分比格式已更改: [1]
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 %
退后一步:
Eric MSFT在评论中指出:
特定于文化的格式可以并且会随着时间而改变。
为确保跨时间和区域性格式的稳定性,您应该使用不变区域性InvariantCulture
(添加了强调):
与文化敏感数据不同,受用户定制或.NET Framework或操作系统更新的影响,不变文化数据在一段时间内和在已安装的区域性中都是稳定的,并且不能由用户自定义。这使得不变区域性对于需要与区域性无关的结果的操作特别有用,例如对格式数据进行持久化的格式化和解析操作,或者无论区域性如何都要求以固定顺序显示数据的排序和排序操作。
[1] Sean1215(OP)报告说,更改必须在OS build 14393之后和16299 之前的某个时间发生。由于组织中各个团队之间基于组策略的Windows更新计划不同,因此他的计算机使用的版本比同事使用的版本更新。