今天项目测试的时候,测试在往input中输入浮点数时只输入到“.”然后系统也接受了,这很容易理解,但他们就当bug提了,当时很是郁闷 ,但为了能结项也没办法,改吧!回头就写了个js自动补齐或自动截取的函数,函数中将输入的浮点数当做字符串处理,然后根据要求返回有效数字。代码拿出来跟大家分享一下,有啥好的想法直接提啊……
function toFloat(val,n){
if("" != val){
val = val + "";
//递归调用时val为int
if(val.indexOf(".") == 0){
val = "0" + val;
}
//val不含小数点
if(val.indexOf(".") == -1){
var zero = ".";
for(i=0; i<n; i++){
zero = zero + "0";
}
return val + zero;
//val小数点后的位数比需要的多
}else if(eval(val.substring(val.indexOf(".") + 1,val.length).length) > eval(n)){
var next = val.substring(val.indexOf(".") + eval(n) + 1,val.indexOf(".") + eval(n) + 2);
//四舍五入
if(next >= 5){
var result = eval(val.substring(0,val.indexOf(".") + eval(n) + 1)) + 0.01;
//四舍五入后result变为int型
return toFloat(result,n);
}else{
return val.substring(0,val.indexOf(".") + eval(n) + 1);
}
}else if(eval(val.substring(val.indexOf("."),val.length).length) < eval(n)){
//截取的小数的后的数字并减去点占的长度
var pointNum = eval(val.substring(val.indexOf("."),val.length).length) - 1;
//需要补0的个数
var zeroNum = eval(n - pointNum);
var zero = "";
for(i=0; i<zeroNum; i++){
zero = zero + "0";
}
return val + zero;
}else{
//符合需求直接返回
return val;
}
}else{
var zero = "0.";
for(i=0; i<n; i++){
zero = zero + "0"
}
return zero;
}
}
附件中我的测试demo,工程是在myEclipse8.5中创建的。
哎,郁闷,几十k的文件上传不了,公司又把端口禁用了,万恶啊!
以下是我测试页面,很简单,不过需要加入jQuery包:
<%@ page language="java" import="java.util.*" pageEncoding="GBK"%>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<title>toFloat Test</title>
<meta http-equiv="pragma" content="no-cache">
<meta http-equiv="cache-control" content="no-cache">
<script type="text/javascript" src="toFloat.js"></script>
<script type="text/javascript" src="jquery-1.4.2.min.js"></script>
<script type="text/javascript">
$(function(){
$("#textId").focus(function(){
$("#textId").val("");
});
$("#textId").blur(function(){
var pointNum = $("#pointNum").val();
var text = $("#textId").val();
$("#textId").val(toFloat(text,pointNum))
});
});
</script>
</head>
<body>
<table style="border: thin" align="center">
<tr>
<td>
保留的小数位数:
</td>
<td>
<input type = "text" name="pointNum" id = "pointNum" value="2">
</td>
</tr>
<tr>
<td>
检验值(数字):
</td>
<td>
<input type = "text" name="textId" id = "textId" value="输入数字,失去焦点检测!">
</td>
</tr>
</table>
</body>
</html>