Mindon.IDEA

Air off, Mind on ~ / Javascript+Golang, Sci, Health… /

Javascript之数字格式化

BlogMS original blog key: 1000115620, blog id: airoff History stat: 浏览/评论:749/2 , 日期:2004年12月13日 15:49

<!– [ 数字格式化 ] 麦盾脚本开始 –>

<!– 请勿删除注释信息以方便别人参考使用,谢谢 :-) –>

<!– mindon scripts 2004, china

/* –> <script language=“JavaScript”>

<!–

// please keep the following TEST SAMPLES message when using the script, thanks

var fRJTest = true; // 此处 true 改为 false 即可隐藏测试用例信息

fRJTest && document.write(“<span style="color:#0f0f0f;font-size:9pt;font-family:Arial\”>“,

“<a href=‘http:”+“//airoff.blogms.com/’> 麦盾博客 </a> MINDON SCRIPTS by fRJ, China 〖 iseasky@hotmail.com 】麦盾脚本 </span>”,

“<hr style=‘height:1pt;width:356pt’ align=‘left’><blockquote><pre>”,

“ 使用方法例子 :\n ————————————-”,

“\ndmask(12345, 16) = ” +dmask(12345, 16),

“\nfmask(123.4567, 10, 5) = ”+fmask(123.4567, 10, 5),

“\nfmask(-123.4567, 10, 3) = ”+fmask(-123.4567, 10, 3),

“\n\n 数制转换技巧提示:(使用toString(进制参数)) \n ————————————-”,

“\n var d = (0127).toString(10) = ”+(0127).toString(10) +“; // 8 进制数 0127 转为 10 进制 ”,

“\n var d = (0xf0).toString(10) = ” +(0xf0).toString(10) +“; // 16 进制数 0xf0 转为 10 进制 ”,

“\n var hex = (315).toString(16) = ” +(315).toString(16) +“; // 10 进制数 315 转为 16 进制 ”,

“</pre></blockquote><hr style=‘height:1pt;width:356pt’ align=‘left’>”,

“ 设置 fRJTest = false 即可隐藏以上用例信息,请勿删除以方便参考使用,谢谢 :-)”);

//*/

var zerostr = “00000000”;

function dmask(value, n)

/ 生成 n 位补零字符串 /

{

var value, n;

if(!value && value != 0) value = “”;

if(!n || n <0) n = 0;

var ds = String(value);

var pref = ds.substr(0,1);

if(!isNaN(value) && pref == “-”) { // 数字符号提取

if(n>0) n–; ds = ds.substr(1);

} else {

pref = “”;

}

if(!zerostr) zerostr = “00000000”;

while(zerostr.length<n) zerostr += zerostr;

ds = (n>ds.length?zerostr.substr(0, n -ds.length):“”) +ds;

return pref +ds;

}

function fmask(value, n, dec)

/ 生成数字 dec位小数(四舍五入) n 位长度(包括负号和小数点) 补零字符串 /

{

var value, n, dec;

if((!value && value != 0) || isNaN(value)) value = 0;

if(!n || n <0) n = 0;

if(!dec || dec < 0) dec = 0;

var fs = String(parseFloat(value));

var pref = fs.substr(0,1);

if(pref == “-”) { // 符号提取

if(n>0) n–; fs = fs.substr(1);

} else {

pref = “”;

}

if(dec > 0 && n>0) n–; // 小数点长度

if(!zerostr) zerostr = “00000000”;

while(zerostr.length<n) zerostr += zerostr;

var dot = fs.indexOf(“.”);

if(dot < 0) { // 无小数点

fs = (n -dec>fs.length?zerostr.substr(0, n-dec-fs.length):“”) +fs; // 整数部分

fs += (dec>0?“.” +zerostr.substr(0, dec):“”); // 小数部分

} else { // 带小数点

var ids = fs.substr(0, dot);

var jds = fs.substr(dot +1);

ids = (n-dec>ids.length?zerostr.substr(0, n-dec-ids.length):“”) +ids; // 整数部分

if(dec > 0) { // 小数部分

if(dec >= jds.length) { // 补零

jds = jds +zerostr.substr(0, dec - jds.length);

} else { // 四舍五入

var de = parseInt(jds.substr(dec-1,1)) +(parseInt(jds.substr(dec,1))>=5?1:0);

jds = jds.substr(0, dec -1) +String(de);

}

}

fs = ids +(dec>0?“.” +jds: “”);

}

return pref +fs;

}

function days(from, to) { var ds =1000 * 60 * 60 *24;

alert(Math.round(Math.abs(Date.parse(to)/ds-Date.parse(from)/ds))

+“ days between ”+from+“ and ”+to);

} //计算两个日期(格式:月/日/年) 之间的天数

//–></script>

<!– 此完整脚本可放在 Javascript 脚本文件中,也可以直接放入 HTML 文档(需设置 fRJTest 隐藏用例信息)使用 –>

<!– [ 数字格式化 ] 麦盾脚本结束 –>

补充参考,考虑性能:

function pad0(num, n) {

var i = n - (num+‘’).length;

if(i<1) return num;

var z = pad0.z||‘’;

var j = z.length;

if(n>j) {

while(n>j){z +=‘00000000’; j+=8;}

pad0.z = z;

}

return z.substr(0, i)+num;

}

Comments