javascript bigmath问题

时间:2011-01-26 14:13:44

标签: javascript math

我有以下一段代码来计算一天中未来的发展时间

    var totalPixels = this._endX - this._startX;
    var segmentPixels = this._nowX - this._startX;
    var startTime = this._nowDate.getTime() - Timeline._minToMs((segmentPixels/totalPixels*this._rangeInMinutes));
    //console.log(this._nowDate.getTime() + '\n' + Timeline._minToMs(segmentPixels/totalPixels*this._rangeInMinutes));
    this._startDate.setTime(startTime);
    console.log(this._rangeInMinutes + ', ' + this._startDate.toString());

典型值

endX:1037

startX:40

nowX:134.625

rangeInMinutes的范围从1到一年中的分钟数。

minToMs简单地将输入乘以60 * 1000。

我的输出与我的预期输出相差大约十分之一。我是否在将分钟转换为毫秒的过程中遇到舍入错误或某种截断?

P.S。:我正在努力做的事情是http://jsfiddle.net/NRx9m/21/

2 个答案:

答案 0 :(得分:1)

我假设您的输出是startTime,我假设_nowDate正如我所期望的那样,现在是日期。

所以Timeline._minToMs((segmentPixels/totalPixels*this._rangeInMinutes));应该是您预计从现在起飞的大概一年吗?

这个数字会根据rangeInMinutes而改变。从您给出的值减去的数字是0.0879*_rangeInMinutes,然后转换为ms。

如果您在此之前获得一个月的值,我会假设您的rangeInMinutes值约为500,000。

如果给定的值为500,000,那么在您离开之前大约需要30.5天。

你能描述一下你用来解释为什么你认为你的输出应该是一年前的数学(显然没有rangeInMinutes变量的变化)。

另外,听听你的rangeInMinutes可能会有什么帮助......

修改

行。看看小提琴中的代码,玩一下,看看我认为它做了什么,我想我会期待......

查看以下内容:

我假设startX,endX和nowX代表时间线图表上的像素位置。

// number of pixels representing the range from 
var totalPixels = endX - startX; startdate to enddate
// Number of pixels representing the range from startdate to nowdate
var segmentPixels = nowX - startX;

以下我稍微重新排列,以便我可以更直观地标记它(我希望)

var startTime = nowTime 
    - Math.floor(
        (rangeInMilliseconds / totalPixels) //time per pixel
        * segmentPixels // pixels between now and start
        );

如果你想:

,你也可以计算出endTime
var endTime = nowTime 
    + Math.floor(
        (rangeInMilliseconds / totalPixels) //time per pixel
        * (endX-nowX) // pixels between now and start
        );

这是我做过的小提琴 - http://jsfiddle.net/MWCbW/

正如您所见,startdate是12月,结束日期是11月。不是确切年份的原因是因为你的一年是48周,这是因为你在一年中(或更确切地说是一个月)的第二次计算方式。

所以我认为年份存在差异。它只是你可能没有跟踪到它的确切位置....显然你需要使用100的比例来获得这个结果,否则我们的日期范围将不到一年。

答案 1 :(得分:0)

为约书亚发布一个实例。我没有看到除了nowX

中的小数点之外还有什么问题
<script>
var x = new Object();
x._minToMs=function(min){  return min*60000; }
x._endX = 1037;
x._startX = 40
x._nowX = 134625; // WITHOUT the decimal point, this gives months instead of weeks
var totalPixels = x._endX - x._startX;
segmentPixels = x._nowX - x._startX;
x._nowDate=new Date();
x._startDate=new Date();
x._rangeInMinutes = 1000;
var startTime = parseInt(x._nowDate.getTime() - x._minToMs((segmentPixels/totalPixels*x._rangeInMinutes)));
x._startDate.setTime(startTime);
alert(x._rangeInMinutes + ', ' + x._startDate.toString());

</script>