我正在计算某物的费用(货币),而当金额应为0.00时,PHP表现异常。它以float的形式给出最终结果,而不是它应该的0。在我的数据库中我有下表id|transaction_total|charge_fees|deposit_fee|amount_to_customer|fees_minus_total_difference所以当我去检查以确保费用+支付的金额-总计=0.00(96.54+.25+3.20-99.99)=1.4210854715202E-14为什么结果是float而不是零?数字本来是多位小数的,但是我用number_format把它放到了2位。例如,手续费实际上可能是3
我有一个包含这样内容的数组$numbers=array(0.49882,0.20510,0.50669,0.20337,0.45878,0.08703,0.43491,0.74491,0.26344,0.37994);我需要将上述数组implode()转换成一个字符串,每个数字都四舍五入到2位精度。由于数组中可能有数百个数字,我如何以最有效的方式实现这一点? 最佳答案 你可以使用array_map()在implode()之前:$numbers=array(0.49882,0.20510,0.50669,0.20337,0.45878
这个问题在这里已经有了答案:关闭11年前。PossibleDuplicate:Floatingpointinaccuracyexamples它会显示“2.30926389122E-14”为什么不为零?它们有什么区别?
这是我得到的functionbcln($n,$scale=10){$iscale=$scale+3;$result='0.0';$i=0;do{$pow=(1+(2*$i++));$mul=bcdiv('1',$pow,$iscale);$fraction=bcmul($mul,bcpow(bcsub($n,'1',$iscale)/bcadd($n,'1.0',$iscale),$pow,$iscale),$iscale);$lastResult=$result;$result=bcadd($fraction,$result,$iscale);}while($result!==$la
如何比较float的问题hasbeenansweredhere.这个问题的不同之处在于我问的是公式。两个投票最高的答案对问题的解决方案略有不同:if(abs(($a-$b)/$b)和if(abs($a-$b)为什么第一个答案包含除法?不会导致结果不准确吗?例如(使用简单的数字),让$a和$b都等于0.01,并假设$a-$b的结果为0.0001,$epsilon为0.001。((((0.01-0.01)==0.0001)/0.01==0.01)鉴于(((0.01-0.01)==0.0001)我的数学可能有点生疏,但我错过了什么?什么时候应该使用一个公式而不是另一个?
PHP中的float不准确是众所周知的(http://php.net/manual/de/language.types.float.php),但是经过以下实验后我有点不满意:var_dump((2.30*100));//float(230)var_dump(round(2.30*100));//float(230)var_dump(ceil(2.30*100));//float(230)var_dump(intval(2.30*100));//int(229)var_dump((int)(2.30*100));//int(229)var_dump(floor(2.30*100));//
我们正在用PHP制作这个网络应用程序,在处理报告时,我们有Excel文件来比较我们的结果,以确保我们的编码执行正确的操作。现在由于浮点运算,我们遇到了一些差异。我们进行相同的除法和乘法运算,但得到的数字略有不同,加起来就会产生显着差异。我的问题是Excel是否将其浮点运算委托(delegate)给CPU,而PHP是否也依赖CPU进行操作。还是每个应用程序都实现了自己的一组数学算法? 最佳答案 MicrosoftExcel使用特定机器上的nativeDouble类型来执行其计算。我不确定PHP到底在使用什么。但是,应该注意的是,即使在
我了解整数大小,PHP_INT_MAX取决于平台。在64位系统上我可以获得:$large_number=9223372036854775807从我读到的PHPDocumentExample3here,当整数溢出时,PHP将整数处理为带有precisionofroughly14decimalsdigits的float。,即:UnsignedInt64:18446744073709551615PHPwillhandlesas:1.844674407371E+19所以看起来所有的精度都只保持在SignedInt64的最大值。这真的只是PHP的限制,我对此无能为力吗?
我有一个JSON字符串,其中包含一些具有以下值的键:123.00。当我使用json_decode函数时,我得到解码后的字符串,其中前一个键等于123,而不是123.00。有没有一种方法可以在不包含引号的情况下更正解码这些值? 最佳答案 目前这是一个PHP错误:错误报告:https://bugs.php.net/bug.php?id=50224将来,可能会有通过options参数传递标志的功能,以实现更严格的类型化。然而,就目前而言,用引号引起来就足够了。 关于PHP函数json_deco
这个问题最好用代码表达:$var1=286.46;//userinputdata$var2=3646;//userinputdata$var3=25000;//minumumamountallowed$var4=($var1*100)-$var2;//=250000if($var4var_dump($var4)输出:float(25000)转换为int时,输出:int(24999)-从而问题所在。虽然我真的不知道该怎么办。乘以100时会出现此问题,虽然我可以采取一些小技巧来解决这个问题(例如*10*10),但我想知道是否有解决此问题的“真正”解决方案。谢谢:)