我有一个双倍的奖励和我的歌曲中的每一个节拍'我添加另一个双。当$ measure增加整数时,我想打印出这个新的度量。
似乎PHP想要对这些值进行舍入以使双重看起来对我来说很好看。这是我得到的打印输出示例:
措施:17楼:16圆形:16
来自代码:
echo "Measure: " . floatval($measure) . "Floor: " . floor($measure) . " Rounded: " . $roundMeasure . " ";
似乎$ measure实际上包含16.99999999或一些类似的值。有什么方法可以阅读它的实际内容吗?更好的是,有没有办法使用PHP的舍入系统,所以我可以抓住17?感谢。
答案 0 :(得分:0)
更好的是,有没有办法使用PHP的舍入系统,所以我可以抓住17
通常你会使用定点算法,例如使用64ths,然后转换输出。
或者您可以检查该度量是否已增加与其floor()不同的值小于,例如0.00001。
一般来说,你应该从不依赖于具有"精确"的浮点值。价值 - chances are it won't。
作为权宜之计,您可以更改php.ini中的精度:
; The number of significant digits displayed in floating point numbers.
; http://php.net/precision
precision = 17
否则您可以转到BCMath:
对于任意精度数学,PHP提供二进制计算器,如果有足够的内存,则表示为字符串,它支持任意大小和精度的数字,最大为2147483647(或0x7FFFFFFF)小数。
答案 1 :(得分:0)
好问题。我之前没有在php中知道这个bug /功能/问题。
以下是我的解决方法:
echo "Measure: "
. floor($measure).'.'
. sprintf("%04d",floor(($measure*10000)-floor($measure)*10000)) ."\n";
您可以将1000更改为您需要的任何精度。
请记住,这个技巧对正值很有用。 如果你也可以有负值,你需要调整它。