JS保留兩位小數(shù)
潞州網(wǎng)站制作公司哪家好,找創(chuàng)新互聯(lián)建站!從網(wǎng)頁設(shè)計(jì)、網(wǎng)站建設(shè)、微信開發(fā)、APP開發(fā)、響應(yīng)式網(wǎng)站開發(fā)等網(wǎng)站項(xiàng)目制作,到程序開發(fā),運(yùn)營維護(hù)。創(chuàng)新互聯(lián)建站從2013年創(chuàng)立到現(xiàn)在10年的時(shí)間,我們擁有了豐富的建站經(jīng)驗(yàn)和運(yùn)維經(jīng)驗(yàn),來保證我們的工作的順利進(jìn)行。專注于網(wǎng)站建設(shè)就選創(chuàng)新互聯(lián)建站。
對(duì)于一些小數(shù)點(diǎn)后有多位的浮點(diǎn)數(shù),我們可能只需要保留2位,但js沒有提供這樣直接的函數(shù),所以我們得自己寫函數(shù)實(shí)現(xiàn)這個(gè)功能,代碼如下:
function changeTwoDecimal(x)
{
var f_x = parseFloat(x);
if (isNaN(f_x))
{
alert('function:changeTwoDecimal-parameter error');
return false;
}
var f_x = Math.round(x*100)/100;
return f_x;
}
功能:將浮點(diǎn)數(shù)四舍五入,取小數(shù)點(diǎn)后2位
用法:changeTwoDecimal(3.1415926) 返回 3.14
changeTwoDecimal(3.1475926) 返回 3.15
js保留2位小數(shù)(強(qiáng)制)
對(duì)于小數(shù)點(diǎn)位數(shù)大于2位的,用上面的函數(shù)沒問題,但是如果小于2位的,比如:
changeTwoDecimal(3.1),將返回 3.1,如果你一定需要3.10這樣的格式,那么需要下面的這個(gè)函數(shù):
function changeTwoDecimal_f(x)
{
var f_x = parseFloat(x);
if (isNaN(f_x))
{
alert('function:changeTwoDecimal-parameter error');
return false;
}
var f_x = Math.round(x*100)/100;
var s_x = f_x.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;
}
功能:將浮點(diǎn)數(shù)四舍五入,取小數(shù)點(diǎn)后2位,如果不足2位則補(bǔ)0,這個(gè)函數(shù)返回的是字符串的格式
用法:changeTwoDecimal(3.1415926) 返回 3.14
changeTwoDecimal(3.1) 返回 3.10
//代碼如下所示:
function?convertCurrency(money)?{
//漢字的數(shù)字
var?cnNums?=?new?Array('零',?'壹',?'貳',?'叁',?'肆',?'伍',?'陸',?'柒',?'捌',?'玖');
//基本單位
var?cnIntRadice?=?new?Array('',?'拾',?'佰',?'仟');
//對(duì)應(yīng)整數(shù)部分?jǐn)U展單位
var?cnIntUnits?=?new?Array('',?'萬',?'億',?'兆');
//對(duì)應(yīng)小數(shù)部分單位
var?cnDecUnits?=?new?Array('角',?'分',?'毫',?'厘');
//整數(shù)金額時(shí)后面跟的字符
var?cnInteger?=?'整';
//整型完以后的單位
var?cnIntLast?=?'元';
//最大處理的數(shù)字
var?maxNum?=?999999999999999.9999;
//金額整數(shù)部分
var?integerNum;
//金額小數(shù)部分
var?decimalNum;
//輸出的中文金額字符串
var?chineseStr?=?'';
//分離金額后用的數(shù)組,預(yù)定義
var?parts;
if?(money?==?'')?{?return?'';?}
money?=?parseFloat(money);
if?(money?=?maxNum)?{
//超出最大處理數(shù)字
return?'';
}
if?(money?==?0)?{
chineseStr?=?cnNums[0]?+?cnIntLast?+?cnInteger;
return?chineseStr;
}
//轉(zhuǎn)換為字符串
money?=?money.toString();
if?(money.indexOf('.')?==?-1)?{
integerNum?=?money;
decimalNum?=?'';
}?else?{
parts?=?money.split('.');
integerNum?=?parts[0];
decimalNum?=?parts[1].substr(0,?4);
}
//獲取整型部分轉(zhuǎn)換
if?(parseInt(integerNum,?10)??0)?{
var?zeroCount?=?0;
var?IntLen?=?integerNum.length;
for?(var?i?=?0;?i??IntLen;?i++)?{
var?n?=?integerNum.substr(i,?1);
var?p?=?IntLen?-?i?-?1;
var?q?=?p?/?4;
var?m?=?p?%?4;
if?(n?==?'0')?{
zeroCount++;
}?else?{
if?(zeroCount??0)?{
chineseStr?+=?cnNums[0];
}
//歸零
zeroCount?=?0;
chineseStr?+=?cnNums[parseInt(n)]?+?cnIntRadice[m];
}
if?(m?==?0??zeroCount??4)?{
chineseStr?+=?cnIntUnits[q];
}
}
chineseStr?+=?cnIntLast;
}
//小數(shù)部分
if?(decimalNum?!=?'')?{
var?decLen?=?decimalNum.length;
for?(var?i?=?0;?i??decLen;?i++)?{
var?n?=?decimalNum.substr(i,?1);
if?(n?!=?'0')?{
chineseStr?+=?cnNums[Number(n)]?+?cnDecUnits[i];
}
}
}
if?(chineseStr?==?'')?{
chineseStr?+=?cnNums[0]?+?cnIntLast?+?cnInteger;
}?else?if?(decimalNum?==?'')?{
chineseStr?+=?cnInteger;
}
return?chineseStr;
}
首先我們看看最簡(jiǎn)單的實(shí)現(xiàn)方法,需要達(dá)到這樣的目的。
輸入一串?dāng)?shù)字或者字符串,最后返回格式化后的字符串,每隔3位用逗號(hào)分隔,通過四舍五入保留小數(shù)點(diǎn)后2兩位。
我們來分析下方法的實(shí)現(xiàn)過程。
替換掉原本傳入數(shù)據(jù)中可能出現(xiàn)的'$'和',',然后判斷是否為數(shù)字。
判斷傳入的數(shù)字是正數(shù)還是負(fù)數(shù)。
判斷小數(shù)位數(shù)的舍入性。
每隔三位,添加一個(gè)逗號(hào)。
重新拼接字符串,正負(fù)號(hào)+整數(shù)位+小數(shù)點(diǎn)+小數(shù)位
你看下面這樣就可以:
單價(jià):input name="a" type="text" id="a" onBlur="c.innerHTML=a.value*b.value"br
數(shù)量:
input name="b" type="text" id="b" value="3" disabledbr
總金額:span id="c"/span
numFormat(num) {
? ? var c = (num.toString().indexOf ('.') !== -1) ? num.toLocaleString() : num.toString().replace(/(\d)(?=(?:\d{3})+$)/g, '$1,');
? ? return c;
}
console.log(this.numFormat(20181029.120))
//格式化錢數(shù),三位加一逗號(hào)
function toThousands(number) {
number = number +"";
number = number.replace(/\,/g, "");
if(isNaN(number) || number == "")return "";
number = Math.round(number * 100) / 100;
if (number 0)
? ? return '-' + outputdollars(Math.floor(Math.abs(number) - 0) + '') + outputcents(Math.abs(number) - 0);
else
? ? return outputdollars(Math.floor(number - 0) + '') + outputcents(number - 0);
}
//格式化金額
function outputdollars(number) {
if (number.length = 3)
? ? return (number == '' ? '0' : number);
else {
? ? var mod = number.length % 3;
? ? var output = (mod == 0 ? '' : (number.substring(0, mod)));
? ? for (i = 0; i Math.floor(number.length / 3); i++) {
? ? ? ? if ((mod == 0) (i == 0))
? ? ? ? ? ? output += number.substring(mod + 3 * i, mod + 3 * i + 3);
? ? ? ? else
? ? ? ? ? ? output += ',' + number.substring(mod + 3 * i, mod + 3 * i + 3);
? ? }
? ? return (output);
}
}
function outputcents(amount) {
amount = Math.round(((amount) - Math.floor(amount)) * 100);
return (amount 10 ? '.0' + amount : '.' + amount);
}