mysql 和php 保留2位小数

 

一般交易中保留的数字的小数位数为2位(即最小单位为 1分钱【0.01元】)

数据库设计中预金钱有关或要求精准度要高的用 decimal(n,m) 表示,n表示保留的数字长度,保留的小数位数,如decimal(5,2) 对应的最大值 999.99

 然而在mysql 中进行浮点数计算时,数据就需要进行截取保留

以下是一些保留小数位数的方法

mysql中:

方法一:truncate() 直接截取不四舍五入

select truncate(4545.1366,2);

运行结果:4545.13

 

方法二:FORMAT() 四舍五入,整数部分超过三位的时候以逗号分割,并且返回的结果是string类型的。

select FORMAT(4545.1366,2);

运行结果:4,545.14

 

方法三:四舍五入 ,适合金钱保留计算

select convert(4545.1366,decimal(6,2));

运行结果:4545.14

 

备注:

MySQL 的CAST()和CONVERT()函数可用来获取一个类型的值,并产生另一个类型的值。

CAST(value as type);

CONVERT(value, type);

可以转换的类型(type)是有限制的。这个类型可以是以下值其中的一个:

  • 二进制,同带binary前缀的效果 : BINARY    
  • 字符型,可带参数 : CHAR()     
  • 日期 : DATE     
  • 时间: TIME     
  • 日期时间型 : DATETIME     
  • 浮点数 : DECIMAL      
  • 整数 : SIGNED     
  • 无符号整数 : UNSIGNED

 

PHP中:

四舍五入法:

    $num = 4545.1366;

 

        //第一种:利用round()对浮点数进行四舍五入

        var_dump(round($num,2)); //float 4545.14

        

        //第二种:利用sprintf格式化字符串

        $format_num = sprintf("%.2f",$num);

        var_dump($format_num); //string '4545.14'

        

        //第三种:利用千位分组来格式化数字的函数number_format()

        var_dump(number_format($num, 2)); //string '4,545.14'

        //或者如下

        var_dump(number_format($num, 2, '.', ''));// string '4,545.14'

        //number_format(float number, int [decimals], string [dec_point规定用作小数点的字符串], string [thousands_sep规定用作千位分隔符的字符串,

    //注释:如果设置了该参数,那么所有其他参数都是必需的。])

 

不四舍五入:

  

    $format_num = sprintf("%.2f",substr(sprintf("%.3f", $num), 0, -1));
       var_dump($format_num); //string '4545.13'
     
取整
    ceil() 向上取整
    floor() 向下取整
posted @ 2018-09-19 11:51  纭卿殇  Views(1506)  Comments(0Edit  收藏  举报