鍍金池/ 問答/Java  HTML/ js 怎樣用正則去掉小數(shù)點(diǎn)后面多于的0

js 怎樣用正則去掉小數(shù)點(diǎn)后面多于的0

想用replace替換掉小數(shù)點(diǎn)后面多于的0.

例如: 12.000700 ——————> 12.0007

注意:若是沒有小數(shù)點(diǎn)的話,匹配不生效,不替換任何字符。


[補(bǔ)充內(nèi)容]

感謝各位老哥的回答。但是可能我對問題的描述不夠全面。

1.(不希望轉(zhuǎn)為數(shù)字)我的整個(gè)數(shù)值計(jì)算是字符串按位計(jì)算的,所以我并不希望將他轉(zhuǎn)為數(shù)字,而是通過正則的方式去掉多余的0。不愿意轉(zhuǎn)換也有一點(diǎn)是String/Number等方法對小數(shù)點(diǎn)后面的位數(shù)有限制。

2.(需要考慮沒有小數(shù)點(diǎn)的情況)/0*$/或者/0+$/這種單純的匹配末尾是不全面的??赡苡袥]有小數(shù)點(diǎn)的存在。

并不希望: 12000 ——————> 12

這明顯改變了數(shù)值

3.(目前想到的方法)目前的能想到的用了兩個(gè)replace一個(gè)match。先匹配到小數(shù)點(diǎn)右面的字符。再將該字符去末尾0替換到小數(shù)點(diǎn)右面。顯然不高級,有沒有更優(yōu)雅的寫法。

var str = "12.000700";
var _tmp = str.match(/\.\d+0+/)[0].replace(/0+$/,'');
console.log(str.replace(/\.\d+0+/, _tmp));
回答
編輯回答
拼未來

parseFloat
= =

2017年9月15日 20:53
編輯回答
蟲児飛

Number("12.000700").toString()

2017年4月3日 03:50
編輯回答
情殺

var a = 10.10100;
var b = a + "";
var c = a.replace(/0+$/,"");
var d = parseInt(c);

replace(/0+$/,"")
字符串替換方法. 第一個(gè)參數(shù)是要替換的char, 第二個(gè)是替換成的char.
/0+$/ 是一個(gè)正則表達(dá)式, $表示從字符串后查找0,+表示一個(gè)或多個(gè). 找到了多個(gè)0替換成"".

2018年8月30日 06:35
編輯回答
尋仙

如果是數(shù)字的話沒必要因?yàn)閖s默認(rèn)給你去掉了
字符串的話用正則或者轉(zhuǎn)數(shù)字

var num = 12.000700;
var str = "12.000700";
console.log(str.replace(/0*$/, "")); //正則
console.log(str - 0); //轉(zhuǎn)為數(shù)字 js操作數(shù)字應(yīng)該默認(rèn)就是去掉數(shù)字后面的0所有
console.log(num); //數(shù)字默認(rèn)去掉后面的0
2018年7月5日 04:35
編輯回答
寫榮

換個(gè)思路行不行?

clipboard.png

既然不換思路,換個(gè)代碼行不行?

str.replace(/\.\d+0+/, () => str.match(/\.\d+0+/)[0].replace(/0+$/, ''));
2017年12月7日 07:26
編輯回答
野橘
const arr=['1200.00100','1200.00000','1200.','1200','1200.10000','0.120010000','0.000011111']
const regexp=/(?:\.0*|(\.\d+?)0+)$/
arr.forEach((item)=>{
    console.log(item.replace(regexp,'$1'))
})

// > 1200.001
// > 1200
// > 1200
// > 1200
// > 1200.1
// > 0.12001
// > 0.000011111

再解釋下正則的意思(?:\.0*|(\.\d+?)0+)$

先分解成4部分

  1. (?:reg1|reg2) - 它是一個(gè)正則分組非捕獲組,要么匹配reg1,要么匹配reg2,優(yōu)先匹配reg1,加上?:不對捕獲組記錄
  2. \.0* - 表示匹配一個(gè).開頭,后邊跟著0或0個(gè)以上數(shù)量的0,且不進(jìn)行捕獲,所以在填充$1時(shí),就是個(gè)空值
  3. (\.\d+?)0+ - 它是一個(gè)捕獲組,匹配一個(gè).開頭后邊跟著非貪婪(懶惰)匹配任意數(shù)字,接著在末尾盡可能多的匹配0這個(gè)字符,匹配完成后,生成一個(gè)捕獲組內(nèi)容
  4. $ - 表示匹配結(jié)果需要以0作為結(jié)尾
2017年6月1日 18:39
編輯回答
尤禮
        var str = "12000700";
        var strNew = Number(str);
        console.log(strNew);
2017年9月26日 10:48
編輯回答
情殺
var sNum = '12.000700',
s = sNum.replace(/(?:(\.\d*[1-9])0+|\.0*)$/, '$1');
alert(s);
2017年4月1日 13:47