我想在科学记数法中显示一个双精度数,在指数部分中有3位小数和3位小数。另外,我想用点("。")作为十进制分隔符显示数字(我的本地化总是用逗号打印)。我想要的格式是这样的:
1.234e+001
我该怎么做?我所有的尝试
echo ( "{0:e}" -f $myDouble )
到目前为止失败了...欢迎任何提示:)
答案 0 :(得分:3)
那是一个令人着迷的地方设置之旅,我没有事先做过的特权,谢谢!试试吧:
$a = New-Object System.Globalization.CultureInfo("en-US")
[double] $myDouble = 1000
$myDouble.tostring("e3", $a)
答案 1 :(得分:1)
无论当前的文化如何,您都可以使用e
custom format specifier指定所需的确切格式。在这种情况下,小数点前一位数,小数点后三位数和三位数指数:
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
...但现在指数是错误的,我不知道如何解决这个问题。让它生成所需文本而无需进一步修改的一种方法是强制它使用invariant culture而不是当前的文化:
PS> (1000).ToString('0.000e+000', [System.Globalization.CultureInfo]::InvariantCulture)
1.000e+003
请注意,这是有效的,因为在不变文化中,十进制字符恰好是您想要的.
。如果不是这种情况,或者您只是想保存一些输入,那么您可以修改NumberDecimalSeparator
property的current culture's number formatting。以下是在当前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
答案 2 :(得分:0)
怎么样:
echo ( "{0:e3}" -f $myDouble )