知识中心
联系我们
手机:**************
邮箱:***********
PHP把科学计数格式转化为数字字符串,PHP用字段varchar类型进行比较排序
1.强制性的用字段为varchar类型进行比较排序
'CAST(`cashnum_week` AS UNSIGNED)
$list = $wx_user->field('id,user_name,head_img,cashnum_week')
->where(['status'=>1])
->order('CAST(`cashnum_week` AS UNSIGNED) DESC')
->select();
直接将字段cashnum_week 转变为无符号化,此时再来进行排序
2.科学计数格式转化为字符串
将一个科学计数格式的数:1.2345678987654321e+30 转化为字符串‘123456789876543210000000000000’
首先将变量进行拆分在重组得到结果
实现原理:(1)将1.2345678987654321e+30拆分为1.2345678987654321和+30
(2)在用1.2345678987654321乘以10的30次方,10的30次方用php函数pow(10,30)来得出。
a.第一种方法,从最普通的想法来
public function sctonum($num){
if(false !== stripos($num, "e")){
$a = explode("e",strtolower($num));
$b = $a[0] * pow(10,$a[1]);
return $b;
}else{
return $num;
}
}
b.用循环来得出
public function numToStr($num)
{
$result = "";
if (stripos($num, 'e') === false) {
return $num;
}
while ($num > 0) {
$v = $num - floor($num / 10) * 10;
$num = floor($num / 10);
$result = $v . $result;
}
return $result;
}
c.全部用php函数来得出
public function sctonum($num, $double = 5){
if(false !== stripos($num, "e")){
$a = explode("e",strtolower($num));
return bcmul($a[0], bcpow(10, $a[1], $double), $double);
}else{
return $num;
}
}
//注$double 是小数位数,可默认设置为没有
总结及建议:一万个人眼里一万个哈利波特!每个结果可以由不同的过程来实现,首先用你自己最顺手的,然后再来优化,其次借鉴能理解又高效规范的方法,比如c,简洁高效。