相关疑难解决方法(0)

Javascript VS PHP舍入

我对PHP和javascript轮数的方式有一些问题.我正在使用PHP的圆函数和这个javascript函数:

function roundNumber(number, decimals) {     
    var newnumber = new Number(number+'').toFixed(parseInt(decimals));
    var value = parseFloat(newnumber);
    return value;
}
Run Code Online (Sandbox Code Playgroud)

我试图舍入的数字是43.65*2.5 + 40%,当使用计算器= 152.775或在PHP = 152.78舍入时.

在javascript中我做一个console.log的数字是152.774999999998,当用上面的函数舍入时给我152.77

非常感谢任何帮助重新解决这个问题

javascript php

6
推荐指数
2
解决办法
4153
查看次数

Math.round舍入误差

我想要舍入1.006到两位小数,期望输出为1.01

当我做的时候

var num = 1.006;
alert(Math.round(num,2)); //Outputs 1 
alert(num.toFixed(2)); //Output 1.01
Run Code Online (Sandbox Code Playgroud)

同样的,

var num =1.106;
alert(Math.round(num,2)); //Outputs 1
alert(num.toFixed(2));; //Outputs 1.11
Run Code Online (Sandbox Code Playgroud)

所以

  • 每次使用toFixed()是否安全?
  • 是toFixed()跨浏览器投诉?

请建议我.

PS:我尝试搜索堆栈溢出类似的答案,但无法得到正确的答案.

EDIT:

为什么1.015返回1.01,其中1.045返回1.05

var num =1.015;
alert(num.toFixed(2)); //Outputs 1.01
alert(Math.round(num*100)/100); //Outputs 1.01
Run Code Online (Sandbox Code Playgroud)

在哪里

var num = 1.045;
alert(num.toFixed(2)); //Outputs 1.04
alert(Math.round(num*100)/100); //Outputs 1.05
Run Code Online (Sandbox Code Playgroud)

javascript math rounding

6
推荐指数
1
解决办法
3227
查看次数

Javascript乘以这些值是错误的吗?

好吧,我知道机器精度是多少,但是这个,我无法理解......

码:

 console.log("meanX",meanX);
 meanX2 = meanX * meanX;           //squared
 console.log("meanX2",meanX2);
Run Code Online (Sandbox Code Playgroud)

控制台输出:

meanX 300.3
meanX2 28493.4400000000002
Run Code Online (Sandbox Code Playgroud)

如果您想知道,meanX2的正确值将是90180.09 这只是截图中可见的众多示例中的一个.

亲眼看看

.toFixed(6)似乎解决了这个问题......但我不知道为什么没有它就行不通.

编辑

好的,我不想在这里发布整个程序代码,因为首先我不是唯一的作者,其次,我也不希望在没有我们许可的情况下复制它.但我很乐意解释如何得到这个错误,并在此处发布整个方法/功能代码.

正如您可能从窗口标题中猜到的那样,此代码属于通道检测算法.我们使用Three.js/webgl在视频的每一帧上运行一些预处理着色器,然后我们分析生成的图像.您在屏幕截图中看到的方法/功能是垂直线拟合算法,是整个事物的一部分.我可以看到算法运行得很好,因为我在视频顶部绘制了通道,并且放置得很好.直到突然车道变成水平杆.这种意外的行为正是因为我在这里描述的现象而发生的,因为从那一刻起我开始在控制台中看到错误的数学.

此外,由于视频和算法每次都以略微不同的fps运行,因此问题并不总是发生在视频的同一时刻,有时它根本不会发生.

这是代码(它有一些改动,因为我试图隔离问题):

this.perpendicularLineFit = function (points, slopeSign) {
    var count = points.length;
    var sumX = 0,
        sumY = 0;
    var sumX2 = 0,
        sumY2 = 0,
        sumXY = 0;
    var meanX, meanY;
    var i, lowp = {}, highp = {};
    var B;
    var slope;
    var originY;

    for (i = 0; i < count; i++) {
        sumX += points[i].x; …
Run Code Online (Sandbox Code Playgroud)

javascript multiplication

5
推荐指数
1
解决办法
597
查看次数

限制JavaScript中的Float精度

我正在使用JavaScript中的函数.我取两个变量x和y.

我需要划分两个变量并在屏幕上显示结果:

x=9; y=110;
x/y;
Run Code Online (Sandbox Code Playgroud)

然后我得到的结果如下:

0.08181818181818181

我需要使用BigDecimal.js我在另一篇文章中找到的东西.

我希望结果显示为:

0.081

javascript floating-point fixed-point

5
推荐指数
1
解决办法
1万
查看次数

javascript如何以这样的准确度打印0.1?

听说 javascript数字是IEEE 754浮点数,这就解释了原因

> 0.3 - 0.2
0.09999999999999998
Run Code Online (Sandbox Code Playgroud)

但我不明白

> 0.1
0.1
Run Code Online (Sandbox Code Playgroud)

我认为0.1无法准确地存储为基础2浮点,但它会向后打印,就像它一直是0.1.是什么赋予了?解释器打印之前是否进行了一些舍入?

至少有两个版本的IEEE 754:1984版本和2008年,这对我没有帮助.听起来后者增加了对十进制算术的完全支持.似乎我们没有.

javascript floating-point ieee-754

5
推荐指数
1
解决办法
656
查看次数

处理浮点错误的最佳方法是什么?

所以我有一个Javascript脚本,它在一个循环中添加小分数,并且它可能会增加0.2到0.1.然后该值被送到另一个函数,但问题是我需要0.3准确输入而不是0.30000000000000004.

什么是确保数字得到纠正和准确的最简单方法.注意,可以将0.25 + 0.125等添加到简单舍入到1的十进制将无法解决问题.

也可以添加0.2 + 0.10000000000000004,尽管这非常非常不可能!

javascript floating-point numbers

5
推荐指数
0
解决办法
314
查看次数

如何在JavaScript中处理货币?

根据我的阅读,JavaScript中的数字实际上存储为浮点数,并且没有真正的整数类型.这准确吗?

如果没有整数类型,那么我该如何准确存储货币?作为一个字符串或什么?

javascript

5
推荐指数
1
解决办法
2571
查看次数

parseFloat方法没有给出正确的输出

这是一个示例程序:

var a = parseFloat("86.69043189999999") + "<br>";
var b = parseFloat("86.79718199999999") + "<br>";
var n = a + b;
document.getElementById("demo").innerHTML = n;
Run Code Online (Sandbox Code Playgroud)
<p id=demo></p>
Run Code Online (Sandbox Code Playgroud)

这两个变量都具有完全相同的小数点,它仍然提供两种不同的输出:

86.6904319
86.79718199999999
Run Code Online (Sandbox Code Playgroud)

为什么会出现如此奇怪的行为?

javascript parsefloat

5
推荐指数
0
解决办法
42
查看次数

小数不是精确的

如果我做0.3 - 0.2它给0.9999999998不是0.1有没有办法让它给出一个十进制的percise?如果计算器不精确,就不能相信它.

javascript

5
推荐指数
1
解决办法
68
查看次数

使用 Javascript、Nodejs 计算 EMA(指数移动平均线)的错误结果

我正在尝试使用此脚本计算 EMA。但它没有给我正确的 EMA。这可能有很多原因,但我不确定是什么。我尝试了不同的 EMA 公式,但没有任何更好的结果,我真的不是专业的编码员,也不是数学家,因此我看不出我做错了什么。

随着时间的推移,EMA 值是如何计算的?对于第一个值,我使用 SMA 计算第一个 EMA,我想这应该可行 - 对吧?

我的 EMA 值= 0.033144798412698406

实际 EMA 值= 0.033084

Close = last closing price

Period = 20;

Multiplier = (2 / (period + 1));

function calculateEMA() {
    if (EMA == 0) {
        EMA = (Close - SMA) * multiplier + SMA;
        calculateEMA();
    } else {
        for (a = 0; a < period; a++) {
            EMA = (Close - previous_ema) * multiplier + previous_ema;
            console.log(EMA + " ema"); …
Run Code Online (Sandbox Code Playgroud)

javascript node.js

5
推荐指数
0
解决办法
1591
查看次数