BcMathScaleDiscardsRequiredFraction
warning native off by defaultGroup: Probable bugs
Retain fractional digits in decimal arithmetic. This inspection is disabled by default; enabling it selects the stated policy.
Example
php
<?php
$x = bcadd('2.125', '0.50', 1);Reported:
- line 2: Retain fractional digits in decimal arithmetic.
Detection
- For bcadd, bcsub or bcmul with constant decimal strings and explicit constant scale, exact decimal evaluation proves nonzero digits will be discarded. Enabling selects a policy prohibiting this truncation; do not infer expected scale from comments.
- Resolve builtin functions, extension classes, constants and method receivers, including aliases and supported named arguments. Inspect reachable operations in one lexical scope with bounded local flow.
- Emit one finding per violating operation. Never infer policy from names or comments. When the proof is inconclusive, nothing is reported.
Exceptions (no report)
- Exclude shadowed or unresolved symbols, incomplete code, unknown required constants, ambiguous receiver identity and unsupported versions. Reassignment, escaping aliases, and unknown calls invalidate dependent flow facts.
- Both @custos-ignore BcMathScaleDiscardsRequiredFraction and @noinspection BcMathScaleDiscardsRequiredFraction suppress this native rule.
Fix
None. A safe repair requires choosing values, error handling, or application behavior.
PHP versions
Apply throughout PHP 5.3–8.5 only where the extension API and syntax exist. Do not flag API unavailability through this rule. Invalid-input error forms vary by PHP version; the BCMath operand contract is unchanged.
Options
None. Use normal rule configuration to enable or disable the inspection.
Configure
In custos.json:
json
{
"rules": {
"BcMathScaleDiscardsRequiredFraction": {
"enabled": true
}
}
}Suppress
Before the statement or declaration (or the first statement of the file):
php
// @custos-ignore BcMathScaleDiscardsRequiredFraction