-4

有没有一种简单的方法来转换像这样的数字

123           ->   123B
1234          ->   1.2K
12345         ->  12.2K
123456        -> 123.4K
1234567       ->   1.2M
12345678      ->  12.3M
123456789     -> 123.4M
...

理想情况下也是天/小时/分钟的大数字。?

4

2 回答 2

1

后缀实际上很简单,一旦我们了解了字母K、M、G、T之间的关系以及它们所代表的因素:

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.

于 2013-06-14T16:28:46.013 回答
1

在 Stackoverflow 上使用 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's answer using DateTime::Format::Duration 也这样做

于 2013-06-14T19:02:26.843 回答