0
공학 표기법에서 [double] 부동 소수점 숫자를 포맷하는 방법은 무엇입니까?공학 표기법에서 [double] 부동 소수점 숫자 서식 지정 방법
PS> Engr(10e-8)
100 nano
PS> Engr(10e-7)
1 micro
공학 표기법에서 [double] 부동 소수점 숫자를 포맷하는 방법은 무엇입니까?공학 표기법에서 [double] 부동 소수점 숫자 서식 지정 방법
PS> Engr(10e-8)
100 nano
PS> Engr(10e-7)
1 micro
function Engr([double] $d) {
[double] $exponent = [Math]::Log10([Math]::Abs($d))
if ([Math]::Abs($d) -ge 1) {
switch([int][Math]::Floor($exponent)) {
0 {return $d.ToString()}
1 {return $d.ToString()}
2 {return $d.ToString()}
3 {return ($d/1e3).ToString() + "k"}
4 {return ($d/1e3).ToString() + "k"}
5 {return ($d/1e3).ToString() + "k"}
6 {return ($d/1e6).ToString() + "M"}
7 {return ($d/1e6).ToString() + "M"}
8 {return ($d/1e6).ToString() + "M"}
9 {return ($d/1e9).ToString() + "G"}
10 {return ($d/1e9).ToString() + "G"}
11 {return ($d/1e9).ToString() + "G"}
12 {return ($d/1e12).ToString() + "T"}
13 {return ($d/1e12).ToString() + "T"}
14 {return ($d/1e12).ToString() + "T"}
15 {return ($d/1e15).ToString() + "P"}
16 {return ($d/1e15).ToString() + "P"}
17 {return ($d/1e15).ToString() + "P"}
18 {return ($d/1e18).ToString() + "E"}
19 {return ($d/1e18).ToString() + "E"}
20 {return ($d/1e18).ToString() + "E"}
21 {return ($d/1e21).ToString() + "Z"}
22 {return ($d/1e21).ToString() + "Z"}
23 {return ($d/1e21).ToString() + "Z"}
default {return ($d/1e24).ToString() + "Y"}
}
}
elseif ([Math]::Abs($d) -gt 0) {
switch ([int][Math]::Floor($exponent)) {
-1 {return ($d * 1e3).ToString() + "m"}
-2 {return ($d * 1e3).ToString() + "m"}
-3 {return ($d * 1e3).ToString() + "m"}
-4 {return ($d * 1e6).ToString() + "µ"}
-5 {return ($d * 1e6).ToString() + "µ"}
-6 {return ($d * 1e6).ToString() + "µ"}
-7 {return ($d * 1e9).ToString() + "n"}
-8 {return ($d * 1e9).ToString() + "n"}
-9 {return ($d * 1e9).ToString() + "n"}
-10 {return ($d * 1e12).ToString() + "p"}
-11 {return ($d * 1e12).ToString() + "p"}
-12 {return ($d * 1e12).ToString() + "p"}
-13 {return ($d * 1e15).ToString() + "f"}
-14 {return ($d * 1e15).ToString() + "f"}
-15 {return ($d * 1e15).ToString() + "f"}
-16 {return ($d * 1e15).ToString() + "a"}
-17 {return ($d * 1e15).ToString() + "a"}
-18 {return ($d * 1e15).ToString() + "a"}
-19 {return ($d * 1e15).ToString() + "z"}
-20 {return ($d * 1e15).ToString() + "z"}
-21 {return ($d * 1e15).ToString() + "z"}
default {return ($d * 1e15).ToString() + "y"}
}
}
else
{
return "0";
}
}
개선의 문제, 당신은 당신의 스위치에 대한 범위를 사용할 수 있습니다'-19 ..- (21) {<#stuff#>}' – TheIncorrigible1
나는 코드가 단지 전력 - 아래의 값을 갖는 에지의 경우 문제가있는 것입니다 의심 1000의. '$ d.ToString()'은 기본 정밀도 6 자리가 아닙니까? 그러므로 999.999999999를 출력하면''1.000000k ''가 아닌''1000.000000''이 출력됩니다. – chux
BTW : 아마도'([int] [Math] :: Floor ($ exponent))/3'을 사용하여'switch'를 단순화할까요? – chux