php - 在 PHP 中打印双精度值的真实值?
问题描述
我有一个双倍的 $measure,对于我的“歌曲”中的每一个节拍,我都会添加另一个双倍。当 $measure 增加一个整数时,我想打印这个新的度量值。
似乎 PHP 想要对这些值进行四舍五入,以使双倍对我来说看起来不错。这是我得到的示例打印输出:
尺寸:17 楼层:16 舍入:16
从代码:
echo "Measure: " . floatval($measure) . "Floor: " . floor($measure) . " Rounded: " . $roundMeasure . " ";
似乎 $measure 实际上包含 16.99999999 或一些类似的值。有什么方法可以阅读它的实际内容吗?更好的是,有什么方法可以使用 PHP 的舍入系统,这样我就可以抓住 17?谢谢。
解决方案
更好的是,有没有办法使用 PHP 的舍入系统,所以我可以抓住 17
通常你会使用定点算术,例如使用 64ths,然后在输出中转换。
或者您可以检查度量值是否增加了与其 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)小数的数字,以字符串表示。
推荐阅读
- django - Stripe 使用 django 的 webhook 说:stripe.error.SignatureVerificationError
- css - 仅在 Chrome 中出现奇怪的 CSS 阴影错误?
- android - 由于带有新代码的新版本,有关如何在 Android Studio 中编写 Soundboard 的教程后出现问题
- amazon-s3 - 有没有办法在 S3 存储桶策略中包含组织 ID
- lua - LuaJIT 的 C 解析器中的字符串文字支持
- apache-kafka - KAFKA - 错误锁定目录时磁盘错误
- html - 是否可以在 CSS 中重新定义命名颜色?
- c - Cello 库如何能够引入运算符和关键字的使用,即使它们不是 C 库的一部分?
- python - Python pandas检查行是否包含字符串
- node.js - Firestore GET Document Promise 没有结果