如何计算double值的有用上限和下限?

时间:2013-08-22 11:59:34

标签: javascript math

我正在建立一个实时图表。通过WebSockets流入的数据基本上由简单的时间戳/值对组成,并在基于时间的折线图中绘制。现在我遇到了一个问题,我想知道什么是最稳定和优雅的方式:

图表的Y缩放必须是动态的,因此我必须时刻关注可见数据的最小/最大值。这部分很简单,因为您只需从数据数组中获取最小值/最大值,并将它们设置为图表的下限和上限。

现在我想为这些限制值添加一些填充,以获得漂亮的圆形限制值。例如,如果给定范围内的最大值是24.7,我希望上限为30。我需要的是一个带有一个参数的函数,它输出下一个“nice”值。以下是一些例子:

     0.13  -->      1
    97.2   -->    100
    17.08  -->     20
   768     -->    800
    -3.4   -->      0
116843     --> 200000
     0.003 -->      0.01

我可以使用数学函数吗?我肯定需要一些稳定的东西,但是如果没有开始计算数字并解析第一个数字等等,我看不出任何方法可以实现这一点,这将非常难看。

提前感谢您的帮助!

此致 罗布

PS:我已经谈过获得上边界值,我当然还需要一个下边界函数,但我想我可以从找到解的上边界函数得到它。

1 个答案:

答案 0 :(得分:1)

你可以拿这个(应该适合你的目的):

function ext_ceil(val){
   if(val < 0)
       return 0;

   var str = val + '';
   var arr = str.split('.');
   var digitsLength = arr[0].length;

   var divisor = 1;
   if(val > 10){

       for(var i=0;i<(digitsLength-1);i++){
           divisor *= 10;
           console.log(divisor);
       }
       val = val / divisor;
       console.log(val);
   }

   val = Math.ceil(val);
   val *= divisor;
   return val;
};

如果您想尝试此算法,请使用my jsFiddle