最近在些东西时候,发现这样一件事,就是数据库中查到的数据,虽然是float的,但是如果后面小数位是00,则会出现这样的情况
看起来很不美观,如果保持一样的小数位数,使页面美观,就可以有一下几个方式
方式一:脚本处理
四舍五入
var num =2.446;
num = num.toFixed(2); // 输出结果为 2.45
直接舍去
Math.floor(15.778 * 100) / 100 // 输出结果为 15.77
也可以创建函数,可以供其它位置调用
//四舍五入保留2位小数(若第二位小数为0,则保留一位小数)
function keepTwoDecimal(num) {
var result = parseFloat(num);
if (isNaN(result)) {
alert('Error!');
return false;
}
result = Math.round(num * 100) / 100;
return result;
}
//四舍五入保留2位小数(不够位数,则用0替补)
function keepTwoDecimalFull(num) {
var result = parseFloat(num);
if (isNaN(result)) {
alert('Error!');
return false;
}
result = Math.round(num * 100) / 100;
var s_x = result.toString();
var pos_decimal = s_x.indexOf('.');
if (pos_decimal < 0) {
pos_decimal = s_x.length;
s_x += '.';
}
while (s_x.length <= pos_decimal + 2) {
s_x += '0';
}
return s_x;
}
还有一些其它的操作
//向上取整
Math.ceil(5/2)
//字符串保留两位小数
Number(15.7784514000.toString().match(/^\d+(?:\.\d{0,2})?/)) // 输出结果为 15.77,不能用于整数如 10 必须写为10.0000
方式二:服务端处理,我这里使用的tp6
php中有一个函数可以满足我的需求 number_format,具体使用方式如下
number_format ( float $number , int $decimals = 0 , string $dec_point = “.” , string $thousands_sep = “,” ) : string
本函数可以接受1个、2个或者4个参数(注意:不能是3个):
如果只提供第一个参数,number的小数部分会被去掉 并且每个千位分隔符都是英文小写逗号","
如果提供两个参数,number将保留小数点后的位数到你设定的值,其余同楼上
如果提供了四个参数,number 将保留decimals个长度的小数部分, 小数点被替换为dec_point,千位分隔符替换为thousands_sep
$a = 1111;
echo number_format($a);
//输出 1,111
echo number_format($a,2);
//输出 1,111.00
echo number_format($a,2,".","");
//输出 1111.00
使用的地方 两个浮点型,在进行加减比较的时候,有时候小数位数 会被 去除。
$a = 11.44;
$b= 22.44;
echo number_format($b-$a,2);
//输出 11.00
需要注意的是,第三个参数 和第四个参数可以不写,不能只写三个参数;只写三个参数会报错;
我个人采用的事服务端的处理形式,因为后期可以依据需求,更改对小数位数的数量配置,这样就不用去更改服务端的脚本,省去了一部分可能产生的成本,这样看起来是不是舒服多了
其它语言一定会有各自的处理函数,就说这些了,,如有不妥,请多见谅