猿问

数字左侧零的情况下的精度问题

我的功能如下:


static function applyPrecision($vals) {

        $originalNumber = $vals['reading'];

        if (is_numeric($originalNumber)) {

            $precision = ($vals['precision'] != '' || $vals['precision'] != 0) ? $vals['precision'] : 4;

            $factor = pow(10, $precision);

            $multipliedNumber = $originalNumber * $factor;

            //$integerMultipliedNumber = floor($multipliedNumber);

            $var = explode(".", $multipliedNumber);

            $integerMultipliedNumber = $var[0];

            return $result = (float) ($integerMultipliedNumber / $factor);

        } else {

            return $originalNumber;

        }

    }

使用此方法,我们可以对数字应用精度,而无需四舍五入,例如:-给定45.12345678精度为3,则输出为45.123


但是,如果像这样的数字:: 45.1000000,精度为3,则输出仅像45.1一样,零被跳过了,有什么办法可以避免这种情况吗?


翻阅古今
浏览 144回答 2
2回答

阿波罗的战车

如果这是关于浮点数的问题,则14.1与14.100相同。如果这是关于字符串的问题,那么您应该只使用substr()。在下面的答案中,$number要删减的$precision位数是多少,要保留的小数位数是多少。$number = (string) $number;$temp = $precision <= 0 ? 0 : $precision+1;return substr($number, 0, strrpos($number, '.') + $temp);

喵喔喔

为了获得浮点数的前3个子位数而不进行舍入,您必须使用,float($number*1000/1000)然后将其与number_format(float($number*1000/1000),3)例子$var =0.35489;$var2 = number_format(floor($var * 1000) / 1000,3);echo $var2;输出0.354例子2$var =0.3000;$var2 = number_format(floor($var * 1000) / 1000,3);echo $var2;输出20.300如果您的精度是可变的,那么您将不得不使用 pow(10,$precision)范例3$var =0.3000;$precision =3;$var2 = number_format(floor($var * pow(10,$precision)) / pow(10,$precision),3);输出30.300
随时随地看视频慕课网APP
我要回答