private function innerTruncate($scale = 0, $ceil = true)
{
$rounded = bcadd($this->value, '0', $scale);
$rlen = strlen($rounded);
$tlen = strlen($this->value);
$mustTruncate = false;
for ($i = $tlen - 1; $i >= $rlen; $i--) {
if ((int) $this->value[$i] > 0) {
$mustTruncate = true;
break;
}
}
if ($mustTruncate) {
$rounded = $ceil ? bcadd($rounded, bcpow('10', -$scale, $scale), $scale) : bcsub($rounded, bcpow('10', -$scale, $scale), $scale);
}
return self::fromString($rounded, $scale);
}