简体   繁体   English

如何截取小数而不四舍五入?

[英]How do I cut off a decimal without rounding?

I'm trying to figure out how to cut off decimals without rounding the last digit. 我试图弄清楚如何在不舍入最后一位数字的情况下舍弃小数。

For example, if my number is 1394.95861 , I would like it to show 1.39 - I don't want the last 9 to round up to a 0 or round down to an 8. 例如,如果我的号是1394.95861 ,我想它显示1.39 -我不希望最后9围捕为0或向下取整为8。

I've tried round, number_format, and all of those, but they all just round the last digit up. 我已经尝试过舍入,number_format以及所有这些,但是它们都只是将最后一位向上舍入。

if($number >= '1000') {

        $result = number_format(($number / 1000), 2);
        return $result;
}

I would not use >= '1000' since that treats $number as a string. 我不会使用>= '1000'因为那样会将$number视为字符串。

Try this: 尝试这个:

if($number >= 1000) {
  $num = floor($number / 10) / 100;
  $result = number_format($num, 2);
  return $result . 'k';
}

I modified that based off of your question and code, but the key thing is floor being used to drop the remaining decimal points (hence why I divide by 10 first), then divide by those you wanted to keep (the divide by 100) to get your number. 我修改,基于把你的问题和代码,但关键的是floor正在利用这些你想(由100分),以保持下降剩下的小数点(所以为什么我10先分),然后分给得到你的电话号码。

EDIT: Calculational example 编辑:计算示例

$number = 123456789.987654321;

Then, $number >= 1000 is true. 然后, $number >= 1000为true。

$number / 10 = 12345678.9987654321 $number / 10 = 12345678.9987654321

And, the floor is 而且,地板是

12345678

Divided by 100, we get 除以100,我们得到

123456.78

Then, run through number format to get 然后,以数字格式运行以获取

123,456.78

And then add a k for the result: 然后为结果添加一个k

123,456.78k

Modified code per chat: 每次聊天修改的代码:

function shorten_number($number) { 
  if($number >= 1000000000) { 
    $result = floor($number / 10000000) / 100; 
    return number_format($result) . 'b'; 
  } elseif($number >= 1000000) { 
    $num = floor($number / 10000) / 100; 
    $result = number_format($num, 2); 
    return $result . 'm'; 
  } elseif($number >= 1000) { 
    $num = floor($number / 10) / 100; 
    $result = number_format($num, 2); 
    return $result . 'k'; 
  } elseif($number < 1000) { 
    $result = $number; 
    return $result; 
  } 
}

do it manually - 手动执行-

$num = 12345.6789;

$number = explode('.', $num);

if (isset($number[1])) {
    if (isset($number[1][0])) {
        $number[0] .= '.'.$number[1][0];
        if (isset($number[1][1])) {
            $number[0] .= $number[1][1];
        }
    }
}
echo (float) $number[0];

Main idea is: create integer digit with proper digits using floor . 主要思想是:使用floor创建具有适当数字的整数。

$number = 1394958.61;
if($number >= '1000') {

        $result = number_format((floor($number /10)/100), 2);
        echo $result . 'k';
}

Or using type casting. 或使用类型转换。

        $result = number_format((intval($number /10)/100), 2);

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM