首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >PowerShell,在另一个区域性中格式化值

PowerShell,在另一个区域性中格式化值
EN

Stack Overflow用户
提问于 2010-03-04 13:21:58
回答 3查看 20K关注 0票数 13

在PowerShell中,是否有一种简单的方法可以在另一个地区格式化数字等?我目前正在编写一些函数来简化SVG的生成,SVG使用.作为小数分隔符,而PowerShell在将浮点数转换为字符串时尊重我的地区设置(de-DE)。

是否有一种简单的方法可以为函数设置另一个区域设置,而不需要粘贴

代码语言:javascript
运行
复制
.ToString((New-Object Globalization.CultureInfo ""))

在每个double变量之后?

注意:这是关于用于格式化的区域设置,而不是格式字符串。

(附带的问题是:在这种情况下是否应该使用不变区域性,或者更确切地说是使用en-US?)

ETA:,我在这里尝试的是以下几点:

代码语言:javascript
运行
复制
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:添加有趣的琐事:

代码语言:javascript
运行
复制
PS Home:> $d=1.23
PS Home:> $d
1,23
PS Home:> "$d"
1.23

通过将变量放入字符串中,set locale似乎并不适用。

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2010-03-04 15:04:28

这是一个PowerShell函数,用于测试其他区域性中的脚本。我相信它可以用于你想要的东西:

代码语言:javascript
运行
复制
function Using-Culture ([System.Globalization.CultureInfo]$culture =(throw "USAGE: Using-Culture -Culture culture -Script {scriptblock}"),
                        [ScriptBlock]$script=(throw "USAGE: Using-Culture -Culture culture -Script {scriptblock}"))
{    
    $OldCulture = [System.Threading.Thread]::CurrentThread.CurrentCulture
    $OldUICulture = [System.Threading.Thread]::CurrentThread.CurrentUICulture
    try {
        [System.Threading.Thread]::CurrentThread.CurrentCulture = $culture
        [System.Threading.Thread]::CurrentThread.CurrentUICulture = $culture        
        Invoke-Command $script    
    }    
    finally {        
        [System.Threading.Thread]::CurrentThread.CurrentCulture = $OldCulture        
        [System.Threading.Thread]::CurrentThread.CurrentUICulture = $OldUICulture    
    }    
}

PS> $res = Using-Culture fr-FR { 1.1 }
PS> $res
1.1
票数 11
EN

Stack Overflow用户

发布于 2010-03-04 14:40:11

我在想如何让它变得简单,于是我想出了加速器:

代码语言:javascript
运行
复制
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()

我希望这会有所帮助。

票数 5
EN

Stack Overflow用户

发布于 2017-02-24 10:35:51

如果您已经在您的环境中加载了文化,

代码语言:javascript
运行
复制
    #>Get-Culture
    LCID             Name             DisplayName                                                                                                                                             
----             ----             -----------                                                                                                                                             
1031             de-DE            German (Germany)                                                                                                                                        

#>Get-UICulture

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

解决这一问题是可能的:

代码语言:javascript
运行
复制
PS Home:> $d=1.23
PS Home:> $d
1,23

就像这样:

代码语言:javascript
运行
复制
$d.ToString([cultureinfo]::CurrentUICulture)
1.23

当然,您需要记住,如果其他用户以不同的区域设置运行脚本,结果可能不会像最初所期望的那样。

然而,这一解决办法可能是有用的。玩得开心!

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/2379514

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档