php - 一个公式在服务器端和客户端有不同的结果吗?

标签 php javascript

我在我的网站上写了一个函数来计算支付费用,但它在 javascript 和 php 中给出了不同的结果。 您应该将此代码复制到 htm/html 文件。

bug.php 中的代码:

<table style="background-color:#ccc; width:600px; font-family:Tahoma">
<tbody><tr style="background-color:#00CCFF"><td>original number</td><td>phpToFixed()</td><td>jsToFixed()</td><td>phpCalc</td><td>jsCalc</td></tr>
<script>
function jsToFixed(i) {
return(Math.floor(i * 100) / 100);
}
function jsCalc(ob){
    val=jsToFixed(ob);
    if(val>0&&val!=''){
    result = jsToFixed(0.95*ob);
    }else{

    result = 0;
    }
    if(result==val&&result!=0){
    result-=0.01;
    }
return result;
}
<?php
function phpToFixed($amount){
$inp= floor($amount * 100) / 100;
return $inp;
}
function phpCalc($amount){
$inp= phpToFixed($amount);

    if($inp>0&&$inp!=''){
$result = phpToFixed($amount*0.95);

    }else{
$result = 0;
    }
if($result==$inp&&$result!=0){
$result-=0.01;
}
return $result;
}
for($i=0;$i<1;$i+=0.009){
?>
document.write("<tr><td class='org'><? echo $i; ?> </td><td class='fix'> <? echo phpToFixed($i); ?> </td><td class='fix'>"+jsToFixed(<? echo $i; ?>)+"</td><td class='calc'>"+jsCalc(<? echo $i; ?>)+"</td><td class='calc'>"+<? echo phpCalc($i); ?>+" </td></tr> ");
<?php
}
?>
</script>
</tbody>
</table>

谁能猜出来?

最佳答案

处理货币时,始终使用整数数学。例如,如果您的货币是美元,请始终以美分计算价格。

float 不能准确表示 0.01。因此,您遇到问题也就不足为奇了。

然而,整数可以精确表示 1,当您完成计算后,您可以除以 100 和 round到小数点后两位 - 任何 FP 错误都太小而不会产生任何影响。

关于php - 一个公式在服务器端和客户端有不同的结果吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10235342/

相关文章:

javascript - 带有 jQ​​uery 验证插件的新 reCaptcha

php - 组合递归迭代器结果 : children with parents

javascript - 数据表 : Disable drag and drop table columns

Javascript 替换无效

php - 如何查找自定义字段等于 '1234' 的 phpBB 用户?

php - 在数组中搜索字符串模式并将其存储在变量中

php - token 中的段数错误(OAuth Google Api with php)

javascript - x 的变量在 transit.js 中不起作用

javascript - 如何获取具有属性 attr 且值为 val 的元素数组

javascript - Chrome MutationObserver 未在某些元素上激活