Powershell:在scientific中格式化双精度,使用点而不考虑区域设置

Powershell:在scientific中格式化双精度,使用点而不考虑区域设置,powershell,powershell-2.0,string-formatting,Powershell,Powershell 2.0,String Formatting,我想在科学记数法中显示一个双精度,小数点后3位,指数部分还有3位小数。另外,我想用一个点(“.”)作为十进制定界符来显示数字(我的本地化程序总是用逗号打印)。我想要的格式如下: 1.234e+001 我该怎么做?我所有的尝试 echo ( "{0:e}" -f $myDouble ) 到目前为止都失败了。。。任何提示欢迎:)如何: echo ( "{0:e3}" -f $myDouble ) 那么: echo ( "{0:e3}" -f $myDouble ) 嗯,这是一次有趣的现场设置

我想在科学记数法中显示一个双精度,小数点后3位,指数部分还有3位小数。另外,我想用一个点(“.”)作为十进制定界符来显示数字(我的本地化程序总是用逗号打印)。我想要的格式如下:

1.234e+001
我该怎么做?我所有的尝试

echo ( "{0:e}" -f $myDouble )
到目前为止都失败了。。。任何提示欢迎:)

如何:

echo ( "{0:e3}" -f $myDouble )
那么:

echo ( "{0:e3}" -f $myDouble )

嗯,这是一次有趣的现场设置之旅,我事先没有特权这样做,所以谢谢你!帮我试试这个:

$a = New-Object System.Globalization.CultureInfo("en-US")
[double] $myDouble = 1000
$myDouble.tostring("e3", $a)

嗯,这是一次有趣的现场设置之旅,我事先没有特权这样做,所以谢谢你!帮我试试这个:

$a = New-Object System.Globalization.CultureInfo("en-US")
[double] $myDouble = 1000
$myDouble.tostring("e3", $a)
可以使用指定所需的确切格式,而不考虑当前区域性。在这种情况下,小数点前一位、小数点后三位和三位指数:

PS> '{0:0.000e+000}' -f 1000
1.000e+003
但是,问题是上述格式字符串中的
将是本地化的小数点(
)。有几种方法可以指定使用文字
字符来代替

PS> '{0:0\.000e+000}' -f 1000
1.000e+000
PS> '{0:0"."000e+000}' -f 1000
1.000e+000
PS> "{0:0'.'000e+000}" -f 1000
1.000e+000
…但现在指数是错误的,我不知道如何解决这个问题。使其生成所需文本而无需进一步修改的一种方法是强制其使用而不是当前区域性:

PS> (1000).ToString('0.000e+000', [System.Globalization.CultureInfo]::InvariantCulture)
1.000e+003
请注意,这是因为在不变区域性中,十进制字符恰好是所需的
。如果不是这样,或者您只是想保存一些键入,那么您可以修改的。下面是一个将十进制字符更改为
的示例在当前PowerShell会话/脚本的持续时间内:

PS> [System.Globalization.NumberFormatInfo]::CurrentInfo.NumberDecimalSeparator
.
PS> '{0:0.000e+000}' -f 1000
1.000e+003
PS> [System.Globalization.NumberFormatInfo]::CurrentInfo.NumberDecimalSeparator = '!'
PS> '{0:0.000e+000}' -f 1000
1!000e+003
可以使用指定所需的确切格式,而不考虑当前区域性。在这种情况下,小数点前一位、小数点后三位和三位指数:

PS> '{0:0.000e+000}' -f 1000
1.000e+003
但是,问题是上述格式字符串中的
将是本地化的小数点(
)。有几种方法可以指定使用文字
字符来代替

PS> '{0:0\.000e+000}' -f 1000
1.000e+000
PS> '{0:0"."000e+000}' -f 1000
1.000e+000
PS> "{0:0'.'000e+000}" -f 1000
1.000e+000
…但现在指数是错误的,我不知道如何解决这个问题。使其生成所需文本而无需进一步修改的一种方法是强制其使用而不是当前区域性:

PS> (1000).ToString('0.000e+000', [System.Globalization.CultureInfo]::InvariantCulture)
1.000e+003
请注意,这是因为在不变区域性中,十进制字符恰好是所需的
。如果不是这样,或者您只是想保存一些键入,那么您可以修改的。下面是一个将十进制字符更改为
的示例在当前PowerShell会话/脚本的持续时间内:

PS> [System.Globalization.NumberFormatInfo]::CurrentInfo.NumberDecimalSeparator
.
PS> '{0:0.000e+000}' -f 1000
1.000e+003
PS> [System.Globalization.NumberFormatInfo]::CurrentInfo.NumberDecimalSeparator = '!'
PS> '{0:0.000e+000}' -f 1000
1!000e+003


调用$myDouble.ToString()[double]$myDouble=1000时的结果是什么;echo$myDouble.ToString()打印“1000”。在这种情况下,我需要“1.000e+003”。当调用$myDouble.ToString()[double]$myDouble=1000;echo$myDouble.ToString()打印“1000”。在这种情况下,我想要“1.000e+003”。[double]$myDouble=1000;echo({0:e3})-f$myDouble)打印字符串1000e+003。逗号是错误的。这就是我得到的:PS C:\Windows\System32\WindowsPowerShell\v1.0>echo({0:e3})-f[Math]::PI)3.142e+000是的,这正是我在问题中解决的问题的一部分:我的“区域性设置”将逗号用作小数分隔符。我想要无圆点的…[double]$myDouble=1000;echo({0:e3})-f$myDouble)打印字符串1000e+003。逗号是错误的。这就是我得到的:PS C:\Windows\System32\WindowsPowerShell\v1.0>echo({0:e3})-f[Math]::PI)3.142e+000是的,这正是我在问题中解决的问题的一部分:我的“区域性设置”将逗号用作小数分隔符。我想要不带点的…+1,因为这是可行的,尽管我相信在这里使用更合适。太好了,这是可行的。同时,我正在使用一个解决方案,使用String.Replace将“.”替换为“.”。这甚至少了一行:)+1,因为这行得通,尽管我相信在这里使用更合适。太好了,这行得通。同时,我正在使用一个解决方案,使用String.Replace将“.”替换为“.”。这甚至少了一行:)当我输入完全相同的行时,我得到“1000E+003”。逗号是个问题。强制PowerShell使用点的格式字符串是什么?@Sh4pe我没有意识到小数点也是本地化的,但事实证明。我的下一个想法是
“{0:0\.000e+000}”
,但是指数是不正确的。顺便问一下,你们当地的文化是什么(系统。全球化。文化信息的价值::CurrentCulture
),我的是de-de。谢谢你们的想法,但我已经找到了一个符合我目的的解决方案:)哦。很抱歉浪费你的时间。还有我的。请不要难过,你帮助了我,我也感谢你的努力:)当我输入完全相同的行时,我得到了“1000E+003”。逗号是个问题。强制PowerShell使用点的格式字符串是什么?@Sh4pe我没有意识到小数点也是本地化的,但事实证明。我的下一个想法是
“{0:0\.000e+000}”
,但是指数是不正确的。顺便问一下,你们当地的文化是什么(系统。全球化。文化信息的价值::CurrentCulture
),我的是de-de。谢谢你们的想法,但我已经找到了一个符合我目的的解决方案:)哦。很抱歉浪费你的时间。还有我的。请不要难过,你帮助了我,我感谢你的努力:)