roave / no-floaters
PHPStan 规则,用于在IEEE-754舍入错误不可接受的情况下禁止浮点数泛滥
1.11.0
2024-01-14 16:22 UTC
Requires
- php: ~8.1.0 || ~8.2.0 || ~8.3.0
- nikic/php-parser: ^4.17.1
- phpstan/phpstan: ^1.10.47
Requires (Dev)
- doctrine/coding-standard: ^12.0.0
- infection/infection: ^0.27.8
- maglnet/composer-require-checker: ^4.7.1
- phpstan/phpstan-phpunit: ^1.3.15
- phpstan/phpstan-strict-rules: ^1.5.2
- phpunit/phpunit: ^10.5.1
- squizlabs/php_codesniffer: ^3.7.2
- dev-master
- 1.12.x-dev
- 1.11.x-dev
- 1.11.0
- 1.10.x-dev
- 1.10.0
- 1.9.x-dev
- 1.9.0
- 1.8.x-dev
- 1.8.0
- 1.7.x-dev
- 1.7.0
- 1.6.x-dev
- 1.6.0
- 1.5.x-dev
- 1.5.0
- 1.4.x-dev
- 1.4.0
- 1.3.x-dev
- 1.3.0
- 1.2.x-dev
- 1.2.0
- 1.1.0
- 1.0.0
- dev-renovate/phpunit-phpunit-11.x
- dev-renovate/nikic-php-parser-5.x
- dev-renovate/all-minor-patch
- dev-renovate/lock-file-maintenance
This package is auto-updated.
Last update: 2024-09-22 03:12:09 UTC
README
此库是一个 PHPStan 插件,禁止
- 声明
float
属性 float
方法参数float
方法返回类型- 将
float
值赋给变量或属性
这种限制的原因是,浮点算术运算产生的舍入误差在处理某些业务逻辑场景时是不可接受的,例如处理货币、评估考试成绩、火箭科学等。
以下是一个典型的示例,可以说明这种问题
var_dump((0.7 + 0.1) === 0.8); // output: bool(false)
这可能会带来完全没有问题,或者很多问题,具体取决于你通过系统运行的数字数量,因此建议在舍入可能引起问题的领域避免使用 float
。
float
在许多编程环境中仍然完全可接受,此规则集应仅应用于必须避免引入舍入错误的地方。
安装
composer require --dev roave/no-floaters
配置
在你的 phpstan.neon
配置中,添加以下部分
includes: - vendor/roave/no-floaters/rules.neon
可选地,你可以通过向你的 phpstan.neon
添加以下内容来配置库,以完全禁止任何生成 float
的表达式
parameters: disallowFloatsEverywhere: true
如果启用了以上功能,给定以下 example-file.php
内容
<?php $a = 1 / 3;
你应该得到以下类似的结果
vendor/bin/phpstan analyse example-file.php -l 7
1/1 [▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓] 100%
------ -----------------------------------------------------
Line example-file.php
------ -----------------------------------------------------
3 Cannot assign float to $a - floats are not allowed.
------ -----------------------------------------------------
[ERROR] Found 1 error
roave/no-floaters 企业版
作为 Tidelift 订阅的一部分提供。
roave/no-floaters 的维护者以及其他数千个包的维护者正在与 Tidelift 合作,为你构建应用程序时使用的开源依赖项提供商业支持和维护。节省时间,降低风险,并提高代码质量,同时支付使用的确切依赖项的维护者。 了解更多信息。.
如果您在项目中设置此库时需要帮助,您可以联系team@roave.com以获取咨询/支持。