【问题标题】:PHP round($num,2) and javascript toFixed(2) is not giving right output for this value 53.955PHP round($num,2) 和 javascript toFixed(2) 没有为此值 53.955 提供正确的输出
【发布时间】:2017-10-03 19:27:21
【问题描述】:

我有一个 php 函数并且有

phpans = round(53.955,2)

和javascript函数

var num  = 53.955;
var jsans = num.toFixed(2);
console.log(jsans);

jsans 和 phpans 都给出不同的 $phpans = 53.96jsans = 53.95 。我不明白为什么会这样.. 谢谢是提前

【问题讨论】:

  • 感谢@Edwin 证明我的回答
  • 我创建了一个后续问题:stackoverflow.com/questions/43803587/…
  • 你好@Edwin 感谢您提出这个问题我也想知道为什么 toFixed() 有这个奇怪的答案

标签: javascript php codeigniter php-5.6


【解决方案1】:

因为计算机无法正确表示浮点数。它可能是 53.95400000000009 或类似的东西。处理这个问题的方法是乘以 100,四舍五入,然后除以 100,因此计算机只处理整数。

var start = 53.955,
        res1,
        res2;
    
    res1 = start.toFixed(2);
    res2 = (start * 100).toFixed(0) / 100;
    console.log(res1, res2);
//Outputs
"53.95"
53.96

【讨论】:

    【解决方案2】:

    JAvascript toFixed: toFixed() 方法将数字转换为字符串,保留指定的小数位数。

    php回合: 将 val 的四舍五入值返回到指定精度(小数点后的位数)。精度也可以是负数或零(默认)。

    结论 tofixed 不像 php round 那样工作。 precision 指定要舍入到的小数位数。

    Javascript函数:

    function round_up (val, precision) {
        power = Math.pow (10, precision);
        poweredVal = Math.ceil (val * power);
        result = poweredVal / power;
    
        return result;
    }
    

    【讨论】:

    • 哦,@ahmed。我理解,但在某些特殊情况下它给出了错误的值...感谢您的帮助...
    • 感谢@ahmed 提供此代码...但如果第三位大于或等于 5,则它不适用于 55.951,则应为四舍五入,否则 2 位将显示为相同
    猜你喜欢
    • 2018-02-27
    • 2018-12-02
    • 2012-09-09
    • 2021-04-28
    • 2015-11-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-10-13
    相关资源
    最近更新 更多