是否有一种简单的方法来转换像这样的数字
123 -> 123B
1234 -> 1.2K
12345 -> 12.2K
123456 -> 123.4K
1234567 -> 1.2M
12345678 -> 12.3M
123456789 -> 123.4M
...
理想情况下也是大数天/小时/分钟。 ?
答案 0 :(得分:1)
K = 10^3 = 10^3^1
M = 10^6 = 10^3^2
G = 10^9 = 10^3^3
T = 10^12 = 10^3^4
要实现的下一个重要事项是10^0 = 1
。
我们想要选择其值小于我们想要转换的值的最大后缀。为此,我们将后缀放入数组中:
my @suffixes = qw/ B K M G T /;
这样
$suffixes[$i] == 10**3**$i # conceptually
现在只需循环索引(可能在reverse
中)并在$val >= 10**3**$i
后立即停止。
答案 1 :(得分:1)
对此进行了讨论on Stackoverflow using Time::Piece。其中一个答案接近计算天数小时分钟。从我之前读过的关于这个问题的内容来看,我认为你可以像这样轻松编写代码:
sub dhms {
my $seconds = shift;
my $days = int $seconds / 86400;
$seconds %= 86400;
my $hours = int $seconds / 3600;
$seconds %= 3600;
my $mins = int $seconds / 60;
my $secs = $seconds % 60;
return $days, $hours, $mins, $secs;
}
更新:daxim的回答使用DateTime :: Format :: Duration也可以这样做