如何在工程符号中格式化[双]浮点数?
PS> Engr(10e-8)
100 nano
PS> Engr(10e-7)
1 micro
答案 0 :(得分:2)
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";
}
}