首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Javascript计算和php计算不匹配

问Javascript计算和php计算不匹配
EN

Stack Overflow用户
提问于 2019-05-11 00:41:11
回答 1查看 323关注 0票数 2

我必须在客户端用JavaScript做一些计算,当用户点击提交时,我必须用PHP语言进行验证。当这样做的时候,我在PHP和JavaScript中得到了不同的结果。

我有以下问题。

JavaScript计算在小数点后的末尾给出额外的数字。

后端验证时,JavaScript计算和PHP计算不匹配。

代码语言:javascript
复制
<script type="text/javascript">
var a = 130;
var b = 1.3595;
var c = a * b;
console.log(c);  //176.73499999999999
console.log(c.toFixed(2));  //176.73
</script>

<?php
$a = 130;
$b = 1.3595;
$c = $a * $b;
echo $c; //176.735
echo round($c,2); //176.74
?>

两者都提供了不同的result.So,我想要的是在JavaScript和PHP上都是176.74或176.73。

EN

回答 1

Stack Overflow用户

发布于 2019-05-11 02:47:09

要获得所需的小数精度,Math.round需要先进行乘法,然后再进行除法(“乘除”方法)。

这种“乘法和=除”方法可能会产生舍入误差,但显然可以通过提高然后降低数字的指数来避免这种错误(称为“指数”方法)。

“乘除”方法:

代码语言:javascript
复制
Math.round(num*100)/100

“指数”方法:

代码语言:javascript
复制
Number(Math.round(num+'e2') + 'e-2')

尝试下面的代码片段,num1 = 1.005,num2 = 1,decimals = 2。“乘除”方法错误,“指数”方法正确。

​

代码语言:javascript
复制
/* the "multiply-and-divide" rounding method */
function roundmult(value, decimals) {
  let multiplier = 1;
  for (let i = 0; i < decimals; i++) {
    multiplier *= 10;
  }
  return Math.round(value * multiplier) / multiplier;
}

/* the "exponent" rounding method */
function roundexp(value, decimals) {
  return Number(Math.round(value + 'e' + decimals) + 'e-' + decimals);
}

function testIt() {
  let decimals = +(document.getElementById("decimals").value);
  let num1 = +(document.getElementById("num1").value);
  let num2 = +(document.getElementById("num2").value);

  let product = num1 * num2;
  let resultmult = roundmult(product, decimals);
  document.getElementById("multdiv").innerText = resultmult;
  let resultexp = roundexp(product, decimals);
  document.getElementById("exponent").innerText = resultexp;
}
代码语言:javascript
复制
<h1>
  Math.round() Test
</h1>
<label for="num1">num1</label>
<input id="num1" type="number"> times
<label for="num2">num2</label>
<input id="num2" type="number"><br />
<label for="decimals">decimal places:</label>
<input id="decimals" type="number"><br /><br />
<button id="doit" onclick="testIt();">
Round it!
</button><br /><br /> The "multiply and divde" method result is: <span id="multdiv"></span>
<br /><br /> The "exponent" method result is: <span id="exponent"></span>

​

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/56081685

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档