国际单位制词头 格式化数字

工作中用到的小功能做个记录 

 php版的十进制数字格式化:

/**
 *
 * 格式化 数字
 * Args:
 *   $n(int): 要格式化的数字
 *   $d(int): 保留几位小数
 * Returns:
 *   str 格式化后的 数字字符串
 */
function number_format2($n,$d=2){
  $b = 1000; // 底
  // 小于 $b 直接返回结果
  if ($n < $b) return $n;
  // 词头符号数组
  $prefix_arr = ['',"k", "M", "G", "T", "P","E","Z","Y","R","Q"];
  $i = floor(log($n, $b)); // 计算对数
  if ($i > 10) return 'n/a'; // 数值溢出返回 n/a
  $m = $n/pow($b, $i); // 最近值倍数
  // 四舍五入 返回结果
  return round($m, $d) . $prefix_arr[$i];
}

$n = number_format2(1582000);
echo $n;
// 1.58M
$n = number_format2(1585000);
echo $n;
// 1.59M

 python版的字节数格式化:

import math


def byte_format(n, d=2):
    """
    格式化 数据体积
    Args:
      n(int): 体积字节数
      d(int): 保留几位小数
    Returns:
      str 格式化后的 体积字符串
    """
    b = 1024  # 底
    # 小于 b 直接返回结果
    if n < b:
        return f'{n}B'
    # 词头符号列表
    prefix_ls = ['', "k", "M", "G", "T", "P", "E", "Z", "Y", "R", "Q"]
    # 计算对数
    i = math.floor(math.log(n, b))
    # 数值溢出返回 n/a
    if i > 10:
        return 'n/a'
    # 最近值倍数
    m = n / math.pow(b, i)
    # 四舍五入 返回结果
    return f'{str(round(m, d))}{prefix_ls[i]}B'


b = byte_format(1582000)
print(b)
# 1.51MB
国际单位制词头 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值