roave/no-floaters

PHPStan 规则,用于在IEEE-754舍入错误不可接受的情况下禁止浮点数泛滥

资助包维护!
Tidelift

安装次数: 155 172

依赖项: 15

建议者: 0

安全性: 0

星级: 207

关注者: 8

分支: 11

开放性问题: 5

类型:phpstan-extension

1.11.0 2024-01-14 16:22 UTC

README

roave/no-floaters

Latest Stable Version

此库是一个 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以获取咨询/支持。