比如:
var num = 0.00;//如何在知道變量num含有小數(shù)點的情況下,轉(zhuǎn)換為字符串保留后2位,而不是通過Fixed(2)
//強行保留2位小數(shù)。
//嘗試過 num+"" ,也不行,返回一個number類型0
可能我的意思是,如果變量是0.0000,這樣的數(shù)字型的變量也可以自動轉(zhuǎn)換成"0.0000",這樣的話,就不能把Fixed()中的參數(shù)寫死,而且也不能根據(jù)字符串加".0000",其實核心問題就是把浮點數(shù)最后位全部為0000的保留下來為字符串。。。有點奇葩。。
如果想通過Fixed(num的長度),這種也是不行的,因為通過字符串話的num,已經(jīng)失去了小數(shù)位和小數(shù)的長度了,,,,,,
function d(alan)//小數(shù)位相關(guān)處理
{
var v = Number(alan);
var r;
if (alan <= 0)//0或者負數(shù)報錯
{
alert("輸入數(shù)值必須大于零");
}
else if (alan <= 0.9)//0.9以內(nèi)的純小數(shù),保留一位有效數(shù)字
{
var i = 0;
while (alan <= 0.9)
{
alan=alan*10;
i++;
}
r = v.toFixed(i);
}
else if (alan-Math.round(alan) == 0)//沒有小數(shù)位,返回整數(shù)數(shù)值
{
r = alan;
}
else if (Math.abs(alan-Math.round(alan))<0.1)//小數(shù)位可以忽略,返回舍入后的整數(shù)值
{
r = Math.round(alan);
}
else if (Math.abs(alan-Math.round(alan))>=0.1)//小數(shù)位不可忽略,保留一位小數(shù)
{
r = v.toFixed(1);
}
return r;
}
這是我給自己做的計算工具中關(guān)于數(shù)字處理用的函數(shù),和你不一樣,沒有轉(zhuǎn)換為字符串,也只保留一位小數(shù),但大體性質(zhì)是類似的,供參考吧。
倒數(shù)第二個的意義是處理1.99舍入后變成2.00這樣會產(chǎn)生多余小數(shù)位的情況,所以干脆獨立做了一個條件篩選。
你的意思是當有小數(shù)點的時候保留2位,沒有的時候就不要顯示有小數(shù)點?如果是這樣的話可以試試這個:
var a = 9;
var b = 9.258;
function demo(num) {
var reg = /\./g; //查看是否存在小數(shù)點
if(reg.test(num)) { //若存在,則保留兩位小數(shù),倒是不用考慮是否用toFixed,因為這個挺好用的
return num.toFixed(2);
} else {//不存在,返回原值
return num;
}
}
console.log(demo(a)); //9
console.log(demo(b)); //9.26建議給個示例,不然題干描述有點模糊。
我現(xiàn)在理解類似于補0操作,即不管小數(shù)點后面是0還是非0,都保留兩位并轉(zhuǎn)換為string.
那這就是一個toFixed(2),幾乎一模一樣。
那么,只能再實現(xiàn)一次toFixed(),這不算是重新【發(fā)明】輪子,這是純粹地重新【制造】輪子。
既然是重造,那么就必須在原有輪子上作改進,否則沒有任何意義。
于是,就有了:參考鏈接
代碼如下:
<html>
<head>
<script type="text/javascript">
Number.prototype.toFixed=function (d) {
var s=this+"";
if(!d)d=0;
if(s.indexOf(".")==-1)s+=".";
s+=new Array(d+1).join("0");
if(new RegExp("^(-|\\+)?(\\d+(\\.\\d{0,"+(d+1)+"})?)\\d*$").test(s)){
var s="0"+RegExp.$2,pm=RegExp.$1,a=RegExp.$3.length,b=true;
if(a==d+2){
a=s.match(/\d/g);
if(parseInt(a[a.length-1])>4){
for(var i=a.length-2;i>=0;i--){
a[i]=parseInt(a[i])+1;
if(a[i]==10){
a[i]=0;
b=i!=1;
}else break;
}
}
s=a.join("").replace(new RegExp("(\\d+)(\\d{"+d+"})\\d$"),"$1.$2");
}if(b)s=s.substr(1);
return (pm+s).replace(/\.$/,"");
}return this+"";
};
</script>
</head>
<body>
<input type="button" value="顯示0.009.toFixed(2)" onclick="alert(0.009.toFixed(2))"><br />
<input type="button" value="顯示0.123.toFixed(2)" onclick="alert(0.123.toFixed(2))"><br />
<input type="button" value="顯示0.125.toFixed(2)" onclick="alert(0.125.toFixed(2))"><br />
<input type="button" value="顯示0.126.toFixed(2)" onclick="alert(0.126.toFixed(2))"><br />
<input type="button" value="顯示20.445.toFixed(2)" onclick="alert(20.445.toFixed(2))"><br />
<input onclick="alert(20.405.toFixed(2))" type="button" value="顯示20.405.toFixed(2)"> <br />
<input onclick="alert(20.415.toFixed(2))" type="button" value="顯示20.415.toFixed(2)"> <br />
<input onclick="alert(20.425.toFixed(2))" type="button" value="顯示20.425.toFixed(2)"> <br />
<input onclick="alert(20.435.toFixed(2))" type="button" value="顯示20.435.toFixed(2)"> <br />
<input onclick="alert(20.445.toFixed(2))" type="button" value="顯示20.445.toFixed(2)"> <br />
<input onclick="alert(20.455.toFixed(2))" type="button" value="顯示20.455.toFixed(2)"> <br />
<input onclick="alert(20.465.toFixed(2))" type="button" value="顯示20.465.toFixed(2)"> <br />
<input onclick="alert(20.475.toFixed(2))" type="button" value="顯示20.475.toFixed(2)"> <br />
<input onclick="alert(20.485.toFixed(2))" type="button" value="顯示20.485.toFixed(2)"> <br />
<input onclick="alert(20.495.toFixed(2))" type="button" value="顯示20.495.toFixed(2)"> <br />
<input onclick="alert(0.05.toFixed(1))" type="button" value="顯示0.05.toFixed(1)"> <br />
<input onclick="alert(0.15.toFixed(1))" type="button" value="顯示0.15.toFixed(1)"> <br />
<input onclick="alert(0.25.toFixed(1))" type="button" value="顯示0.25.toFixed(1)"> <br />
<input onclick="alert(0.35.toFixed(1))" type="button" value="顯示0.35.toFixed(1)"> <br />
<input onclick="alert(0.45.toFixed(1))" type="button" value="顯示0.45.toFixed(1)"> <br />
<input onclick="alert(0.55.toFixed(1))" type="button" value="顯示0.55.toFixed(1)"> <br />
<input onclick="alert(0.65.toFixed(1))" type="button" value="顯示0.65.toFixed(1)"> <br />
<input onclick="alert(0.75.toFixed(1))" type="button" value="顯示0.75.toFixed(1)"> <br />
<input onclick="alert(0.85.toFixed(1))" type="button" value="顯示0.85.toFixed(1)"> <br />
<input onclick="alert(0.95.toFixed(1))" type="button" value="顯示0.95.toFixed(1)"> <br />
</body>
</html>
以上是方案一。
方案二就是先將浮點數(shù)轉(zhuǎn)換為整型進行精度處理,然后對整形進行處理,處理完畢后進行字符串操作。
function demo (num) {
num = (num.toString()).match(/(\d+\.\d{0,2})|(\d+)/)[0];
if(!/\./.test(num)) {
num = num + '.00';
}else if(/\.\d{1}$/.test(num)){
num = num + '0';
}
return num;
}
console.log(demo(6)) //6.00
console.log(demo(6.0)) //6.00
console.log(demo(6.1)) //6.10
console.log(demo(6.21)) //6.21
console.log(demo(6.333)) //6.33
console.log(demo(0)) //0.00
console.log(demo(0.1)) //0.10
console.log(demo(0.01)) //0.01
console.log(demo(0.001)) //0.00北大青鳥APTECH成立于1999年。依托北京大學優(yōu)質(zhì)雄厚的教育資源和背景,秉承“教育改變生活”的發(fā)展理念,致力于培養(yǎng)中國IT技能型緊缺人才,是大數(shù)據(jù)專業(yè)的國家
達內(nèi)教育集團成立于2002年,是一家由留學海歸創(chuàng)辦的高端職業(yè)教育培訓機構(gòu),是中國一站式人才培養(yǎng)平臺、一站式人才輸送平臺。2014年4月3日在美國成功上市,融資1
北大課工場是北京大學校辦產(chǎn)業(yè)為響應國家深化產(chǎn)教融合/校企合作的政策,積極推進“中國制造2025”,實現(xiàn)中華民族偉大復興的升級產(chǎn)業(yè)鏈。利用北京大學優(yōu)質(zhì)教育資源及背
博為峰,中國職業(yè)人才培訓領(lǐng)域的先行者
曾工作于聯(lián)想擔任系統(tǒng)開發(fā)工程師,曾在博彥科技股份有限公司擔任項目經(jīng)理從事移動互聯(lián)網(wǎng)管理及研發(fā)工作,曾創(chuàng)辦藍懿科技有限責任公司從事總經(jīng)理職務負責iOS教學及管理工作。
浪潮集團項目經(jīng)理。精通Java與.NET 技術(shù), 熟練的跨平臺面向?qū)ο箝_發(fā)經(jīng)驗,技術(shù)功底深厚。 授課風格 授課風格清新自然、條理清晰、主次分明、重點難點突出、引人入勝。
精通HTML5和CSS3;Javascript及主流js庫,具有快速界面開發(fā)的能力,對瀏覽器兼容性、前端性能優(yōu)化等有深入理解。精通網(wǎng)頁制作和網(wǎng)頁游戲開發(fā)。
具有10 年的Java 企業(yè)應用開發(fā)經(jīng)驗。曾經(jīng)歷任德國Software AG 技術(shù)顧問,美國Dachieve 系統(tǒng)架構(gòu)師,美國AngelEngineers Inc. 系統(tǒng)架構(gòu)師。