在PowerShell中,是否有一种简单的方法可以在另一个地区格式化数字等?我目前正在编写一些函数来简化SVG的生成,SVG使用.作为小数分隔符,而PowerShell在将浮点数转换为字符串时尊重我的地区设置(de-DE)。
是否有一种简单的方法可以为函数设置另一个区域设置,而不需要粘贴
.ToString((New-Object Globalization.CultureInfo ""))在每个double变量之后?
注意:这是关于用于格式化的区域设置,而不是格式字符串。
(附带的问题是:在这种情况下是否应该使用不变区域性,或者更确切地说是使用en-US?)
ETA:,我在这里尝试的是以下几点:
function New-SvgWave([int]$HalfWaves, [double]$Amplitude, [switch]$Upwards) {
"<path d='M0,0q0.5,{0} 1,0{1}v1q-0.5,{2} -1,0{3}z'/>" -f (
$(if ($Upwards) {-$Amplitude} else {$Amplitude}),
("t1,0" * ($HalfWaves - 1)),
$(if ($Upwards -xor ($HalfWaves % 2 -eq 0)) {-$Amplitude} else {$Amplitude}),
("t-1,0" * ($HalfWaves - 1))
)
}我经常写的东西有点自动化,双值需要使用小数点,而不是逗号(他们在我的语言环境中使用)。
ETA2:添加有趣的琐事:
PS Home:> $d=1.23
PS Home:> $d
1,23
PS Home:> "$d"
1.23通过将变量放入字符串中,set locale似乎并不适用。
发布于 2010-03-04 14:40:11
我在想如何让它变得简单,于是我想出了加速器:
Add-type -typedef @"
using System;
public class InvFloat
{
double _f = 0;
private InvFloat (double f) {
_f = f;
}
private InvFloat(string f) {
_f = Double.Parse(f, System.Globalization.CultureInfo.InvariantCulture);
}
public static implicit operator InvFloat (double f) {
return new InvFloat(f);
}
public static implicit operator double(InvFloat f) {
return f._f;
}
public static explicit operator InvFloat (string f) {
return new InvFloat (f);
}
public override string ToString() {
return _f.ToString(System.Globalization.CultureInfo.InvariantCulture);
}
}
"@
$acce = [type]::gettype("System.Management.Automation.TypeAccelerators")
$acce::Add('f', [InvFloat])
$y = 1.5.ToString()
$z = ([f]1.5).ToString()我希望这会有所帮助。
https://stackoverflow.com/questions/2379514
复制相似问题