在PHP中打印双精度的真值?

时间:2018-05-20 22:09:08

标签: php

我有一个双倍的奖励和我的歌曲中的每一个节拍'我添加另一个双。当$ measure增加整数时,我想打印出这个新的度量。

似乎PHP想要对这些值进行舍入以使双重看起来对我来说很好看。这是我得到的打印输出示例:

措施:17楼:16圆形:16

来自代码:

echo "Measure: " . floatval($measure) . "Floor: " . floor($measure) . " Rounded: " . $roundMeasure . " ";

似乎$ measure实际上包含16.99999999或一些类似的值。有什么方法可以阅读它的实际内容吗?更好的是,有没有办法使用PHP的舍入系统,所以我可以抓住17?感谢。

2 个答案:

答案 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 /功能/问题。

以下是我的解决方法:

https://ideone.com/JgDDvo

echo "Measure: " 
     . floor($measure).'.'
     . sprintf("%04d",floor(($measure*10000)-floor($measure)*10000)) ."\n";

您可以将1000更改为您需要的任何精度。

请记住,这个技巧对正值很有用。 如果你也可以有负值,你需要调整它。