工作中用到的小功能做个记录
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
国际单位制词头