javascript格式化浮点型数据

今天项目测试的时候,测试在往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">&nbsp;&nbsp;&nbsp;&nbsp;
  		</td>
	</tr>
	<tr>
		<td>
  			检验值(数字):
  		</td>
  		<td>
		    <input type = "text" name="textId" id = "textId" value="输入数字,失去焦点检测!">
  		</td>
  	</tr>
  </table>
  </body>
</html>


 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值