创造好的数字 - 如何处理数字< 0与log10?

时间:2013-03-26 01:06:29

标签: php math

我整理了一个函数来创建用于显示标签的“漂亮数字”。该函数使用log10来标准化奇数。不幸的是, log10不处理数字< 0但返回NAN
现在,我有一个“丑陋”的数字,如-2.36,如何获取最接近的好号码,例如-2.3-2.0

如果我将其转换为2.36以便通过该函数将其转换为-1之后,我会得到-2.4 --->不行,因为需要nice-number > ugly-number

有什么想法吗?

定义好数字等的链接:
http://wiki.tcl.tk/16640
Algorithm for "nice" grid line intervals on a graph
round to nearest nice number

这是我的代码:

function niceNum($range, $round) {
    // $exponent: exponent of range
    // $fraction: fractional part of range
    // $niceFraction: nice, rounded fraction  
    if ($range==0) return 0;

    $exponent = floor(log10($range));
    $fraction = $range / pow(10, $exponent);

    if ($round) {
        if ($fraction < 1.5)
            $niceFraction = 1;
        elseif ($fraction < 3)
            $niceFraction = 2;
        elseif ($fraction < 7)
            $niceFraction = 5;
        else
            $niceFraction = 10;
    } else {
        if ($fraction <= 1)
            $niceFraction = 1;
        elseif ($fraction <= 2)
            $niceFraction = 2;
        elseif ($fraction <= 5)
            $niceFraction = 5;
        else
            $niceFraction = 10;
    }
    return $niceFraction * pow(10, $exponent);
}

0 个答案:

没有答案