保留两位小数var number = 123.4567
number.toString().replace(/^(\d+\.\d{2})\d*$/,"$1")
//结果:123.45
其中$1是取前面规则的第一个小括号里的内容,为什么规则小括号后面还要加一个\d*???,好像\d*是取不到的吧????
有点疑惑括号里明明已经匹配了一到多个数字,中间匹配了点号,最后是匹配数字位数为两位,为什么括号外面要加\d*呢??
number.toString().replace(/^(\d+\.\d{2})\d*$/,"$1")
//结果:123.45
其中$1是取前面规则的第一个小括号里的内容,为什么规则小括号后面还要加一个\d*???,好像\d*是取不到的吧????
有点疑惑括号里明明已经匹配了一到多个数字,中间匹配了点号,最后是匹配数字位数为两位,为什么括号外面要加\d*呢??
楼主要理解这个代码用的是replace目的是替换.替换就相当于截取.把有用的替换出来.没有的剔掉
(/^(\d+\.\d{2})\d* 这个表达式()里的东西是你想要的目标串.后面的是为了保证匹配整个字符串
$1 只捕获()里的内容 也就是把\d*的给扔掉了
^也一样了.^是代表字符串开始的位置.
有了他们.如果你的输入串是"s123.234ss"就不会做替换了.
呵呵,是哦,不过这个一般我是拿来处理一些小数的内容,如果number=123.0000,取出的值就只有123了,why?
function getFixed(number){
number = number.toFixed(3);
number = number.slice(0,number.length-1);
return number;
}
alert(getFixed(123.4567));//123.45
alert(getFixed(123.45));//123.45
alert(getFixed(123.4));//123.40
alert(getFixed(123));//123.00
</script>
Math._floor = Math.floor;
// 向下取整,扩展为按小数位截取。
Math.floor = function(number, decimalLength){
if (arguments.length == 2)
{
number *= Math.pow(10,decimalLength); return Math._floor(number)/Math.pow(10,decimalLength);
}
else
return Math._floor(number);
};Math._ceil = Math.ceil;
// 向上取整,扩展为按小数位截取。
Math.ceil = function(number, decimalLength){
if (arguments.length == 2)
{
number *= Math.pow(10,decimalLength); return Math._ceil(number)/Math.pow(10,decimalLength);
}
else
return Math._ceil(number);
};Math._round = Math.round;
// 四舍五入取整,扩展为按小数位截取。
Math.round = function(number, decimalLength){
if (arguments.length == 2)
{
number *= Math.pow(10,decimalLength); return Math._round(number)/Math.pow(10,decimalLength);
}
else
return Math._round(number);
};alert(Math.floor(123.567, 2));
alert(Math.ceil(123.567, 2));
alert(Math.round(123.567, 2));