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