<script>
//将字符串换成便于观察的格式:srcStr: 要转化的字符串 divNum:分隔位数, dotNum:小数位数
function formatNum(srcStr,divNum,dotNum)
{
srcStr = ""+srcStr+"";
strLen = srcStr.length;
var resultStr="";
//判断是否为数字
if(isNumber(srcStr) != true){
alert("输入的内容必需是有效的数字!");
return srcStr;
}
//长度为空不处理
if(strLen == 0 || (parseFloat(srcStr) == 0)){
resultStr ="0.";
for (i=0;i<dotNum;i++){
resultStr = resultStr+"0";
}
return resultStr;
}
dotPos = srcStr.indexOf(".",0);
if (dotPos == -1){
//处理整数的情况
resultStr = divIntNum(srcStr, divNum);
resultStr = resultStr + ".";
for (i=0;i<dotNum;i++){
resultStr = resultStr+"0";
}
return resultStr;
}else{
//处理小数的情况
strBfDot = srcStr.substr(0, dotPos);
strAftDot = srcStr.substr(dotPos + 1, srcStr.length);
resultStr = parseFloat(strBfDot)+parseFloat(divDecimalNum(strAftDot, dotNum))/100;
resultStr = resultStr + "";
dotPos = resultStr.indexOf(".");
if (dotPos == -1) {
resultStr = divIntNum(resultStr, divNum) + ".00";
} else {
strBfDot = resultStr.substr(0, dotPos);
strAftDot = resultStr.substr(dotPos, resultStr.length);
while (strAftDot.length < 3) {
strAftDot+="0";
}
resultStr = "" + divIntNum(strBfDot, divNum) + strAftDot;
}
return resultStr;
}
}
//对于格式化后的数据进行还原
function formatNum2(srcStr){
var obj = event.srcElement;
var txt =obj.createTextRange();
txt.moveStart('character',obj.length);
txt.collapse(true);
txt.select();
return srcStr.replaceAll(",","");
}
//整数部分处理
function divIntNum(srcStr, divNum){
var len=srcStr.length;
var result ="";
if(len == 0){
return 0;
}else{
while(len>divNum)
{
result = "," + srcStr.substr(len-divNum) + result;
srcStr = srcStr.substr(0, len-divNum);
len=len-divNum;
}
result = srcStr + result;
}
return result;
}
//小数部分处理
function divDecimalNum(strAftDot, dotNum){
resultStr ="";
if(strAftDot.length > dotNum){
nTen =1;
for(j=0;j<dotNum;j++){
nTen = nTen*10;
}
resultStr = resultStr + Math.round(parseFloat("0." + strAftDot)*nTen);
while(resultStr.length<dotNum){
resultStr ="0" + resultStr;
}
}else{
resultStr = strAftDot;
for (i=0;i<dotNum - strAftDot.length;i++){
resultStr = resultStr +"0";
}
}
return resultStr;
}
//判断是否为数字
function isNumber(srcStr){
var re =/^(([1-9]\d*)|0)[\.]?\d*$/;
return re.test(srcStr);
}
String.prototype.replaceAll = function(s1,s2){
return this.replace(new RegExp(s1,"gm"),s2);
}
function chkPrice(obj) {
if (obj.value == '') {
return;
}
if (!isNumber(obj.value.replaceAll(",",""))) {
if(ckgHF(obj)) {
alert("温馨提示:输入的金额格式不正确!");
} else {
alert("温馨提示: 请输入有效的金额!");
}
obj.value = "";
obj.focus();
} else {
if(ckgHF(obj)) {
alert("温馨提示:输入的金额格式不正确!");
obj.value = "";
obj.focus();
} else {
obj.value=formatNum(obj.value.replaceAll(",",""),3,2);
}
}
}
function ckgHF(obj) {
try {
var inp = obj.value;
if (inp != '') {
if (inp.substring(0,1) == ",") {
return true;
}
if (inp.indexOf(".") != -1) {
inp = inp.substring(0,inp.indexOf("."));
}
inp=inp.split("").reverse().join("");
var ind = -1;
while((ind=inp.indexOf(",")) != -1) {
if (ind<3 || (ind+1)%4 != 0) {
return true;
} else {
inp = inp.replace(",", "R");
}
}
}
return false;
} catch (e) {
return true;
}
}
function bchkPrice(obj) {
if (obj.value == '') {
return;
}
obj.value=formatNum2(obj.value);
}
//对于格式化后的数据进行还原
function formatNum2(srcStr){
var obj = event.srcElement;
var txt =obj.createTextRange();
txt.moveStart('character',obj.length);
txt.collapse(true);
txt.select();
return srcStr.replaceAll(",","");
}
</script>
<input type="text" onblur="chkPrice(this)" onfocus="bchkPrice(this)"/>
详细解决方案
小数点金额证验
热度:356 发布时间:2012-08-27 21:21:57.0
相关解决方案