翻阅了一下js手册,发现js对小数的处理

Math.ceil(),ceil() 方法可对一个数进行上舍入。参数必须是一个数值。返回值大于等于 x,并且与它最接近的整数。

Math.floor(),floor() 方法可对一个数进行下舍入。参数可以是任意数值或表达式。返回值小于等于 x,且与 x 最接近的整数。

Math.round(),round() 方法可把一个数字舍入为最接近的整数参数必须是一个数值。返回值与 x 最接近的整数。一是取整数部分Math.floor();还有小数进一Math.ceil()

比如:var num = 1.23456,我如何用js根据给定的位数n,来进行四舍五入、舍去、进一舍去处理呢?

2011-02-05 12:21:17

6 Answers

给一个笨点的办法,是你想要的吧

  
function exctr(num,n,type) { num = num*Math.pow(10,n); switch(type) { case 'ceil': num = Math.ceil(num); break; case 'floor': num = Math.floor(num); break; case 'round': num = Math.round(num); break; default: break; } return num/Math.pow(10,n); } var num = 1.23456 alert(exctr(num,3,'round'));//1.235 alert(exctr(num,3,'ceil'));//1.235 alert(exctr(num,3,'floor'));//1.234
2011-02-05 15:58:12
function formatFloat(src, pos) { return Math.round(src*Math.pow(10, pos))/Math.pow(10, pos); } alert(formatFloat("1212.2353", 2)); var test=11111.115; alert(test.toFixed(2));
2011-02-05 17:08:59
var Number = (function(){ function getDecimalDigits(num) { num = String(num); var i = number.indexOf("."); return i < 0 ? 0 : (num.length - i - i); } return { "floor":function(num,digits){ if(getDicimalDigits(num) > digits) { num -= 5/Math.pow(10, digits+1); } return parseFloat(num.toFixed(digits)); }, "ceil":function(num,digits){ if(getDicimalDigits(num) > digits) { num += 5/Math.pow(10, digits+1); } return parseFloat(num.toFixed(digits)); }, "round":function(num,digits){ if(num < 0) { num = -num; var n = parseFloat(num.toFixed(digits)); if(n < num){ num = -n - 1/Math.pow(10, digits); }else if(n > num){ num = -n + 1/Math.pow(10, digits); } } return parseFloat(num.toFixed(digits)); } }; })(); //Number.ceil alert(Number.floor(-0.23,1));//-0.3 alert(Number.floor(-0.27,1));//-0.3 alert(Number.floor(0.23,1));//0.2 alert(Number.floor(0.27,1));//0.2 //Number.ceil alert(Number.ceil(-0.23,1));//-0.2 alert(Number.ceil(-0.27,1));//-0.2 alert(Number.ceil(0.23,1));//0.3 alert(Number.ceil(0.27,1));//0.3 //Number.round alert(Number.round(-0.23,1));//-0.3 alert(Number.round(-0.27,1));//-0.2 alert(Number.round(0.23,1));//0.2 alert(Number.round(0.27,1));//0.3
2011-02-05 19:22:07

我认为最简单的方法是直接用toFixed()。
toFixed() 方法可把 Number 四舍五入为指定小数位数的数字。
用法大概是这样: 

<script type="text/javascript"> var num = new Number(1.23456); document.write (num.toFixed(3)) </script>

//输出结果:1.235

2011-02-05 20:58:12

怎么多达人给答案了,我也给弄了一个,你可以对比着看看,下面有测试直接调用的例子: 

<script type="text/javascript"> function swnum(s, n) { n = n > 0 && n <= 20 ? n : 2; s = parseFloat((s + "").replace(/[^\d\.-]/g, "")).toFixed(n) + ""; var l = s.split(".")[0].split("").reverse(), r = s.split(".")[1]; t = ""; for(i = 0; i < l.length; i ++ ) { t += l[i] + ((i + 1) % 3 == 0 && (i + 1) != l.length ? "," : ""); } return t.split("").reverse().join("") + "." + r; } function snum(s) { return parseFloat(s.replace(/[^\d\.-]/g, "")); } function g(id) { return document.getElementById(id); } window.onload = function() { var num, txt = g("txt"), txt2 = g("txt2"), btn = g("btn"), btn2 = g("btn2"), span = g("span"); btn.onclick = function() { num = parseInt(g("num").value); txt.value = swnum(txt.value, num); txt2.value = swnum(txt2.value, num); } ; btn2.onclick = function() { num = parseInt(g("num").value); span.innerHTML = "=" + swnum(snum(txt.value) + snum(txt2.value), num); } ; } ; </script>

调用swnum("11111.275910", 3),返回11,111.276。

2011-02-05 21:43:56
var Digit = {}; /** * 四舍五入法截取一个小数 * @param float digit 要格式化的数字 * @param integer length 要保留的小数位数 * @return float */ Digit.round = function(digit, length) { length = length ? parseInt(length) : 0; if (length <= 0) return Math.round(digit); digit = Math.round(digit * Math.pow(10, length)) / Math.pow(10, length); return digit; }; /** * 舍去法截取一个小数 * @param float digit 要格式化的数字 * @param integer length 要保留的小数位数 * @return float */ Digit.floor = function(digit, length) { length = length ? parseInt(length) : 0; if (length <= 0) return Math.floor(digit); digit = Math.floor(digit * Math.pow(10, length)) / Math.pow(10, length); return digit; }; /** * 进一法截取一个小数 * @param float digit 要格式化的数字 * @param integer length 要保留的小数位数 * @return float */ Digit.ceil = function(digit, length) { length = length ? parseInt(length) : 0; if (length <= 0) return Math.ceil(digit); digit = Math.ceil(digit * Math.pow(10, length)) / Math.pow(10, length); return digit; }; // 使用方法 var num = 1.23456; //四色五入保留2位小数 Digit.round(num, 2); //舍去法保留2位小数 Digit.floor(num, 2); //进一法保留2位小数 Digit.ceil(num, 2);
2011-02-05 13:56:26
您不能回答该问题或者回答已经关闭!

相关文章推荐

  • C#中using指令的几种用法

    using + 命名空间名字,这样可以在程序中直接用命令空间中的类型,而不必指定类型的详细命名空间,类似于Java的import,这个功能也是最常用的,几乎每个cs的程序都会用到

  • C#实例解析适配器设计模式

    将一个类的接口变成客户端所期待的另一种接口,从而使原本因接口不匹配而无法在一起工作的两个类能够一起工作

  • C#开发高性能Log Help类设计开发

    项目中要在操作数据库的异常处理中加入写Log日志,对于商业上有要求,写log时对其它操作尽可能影响小,不能因为加入log导致耗时太多

  • 使用托管C++粘合C#和C++代码(二)

    本文实现一下C++代码调用C#代码的过程。我构造一个简单并且直观的例子:通过C++ UI 触发C# UI.

  • Async和Await使异步编程更简单

    C#5.0中async和await两个关键字,这两个关键字简化了异步编程,之所以简化了,还是因为编译器给我们做了更多的工作

  • C#开发中的反射机制

    反射的定义:审查元数据并收集关于它的类型信息的能力。元数据(编译以后的最基本数据单元)就是一大堆的表,当编译程序集或者模块时,编译器会创建一个类定义表,一个字段定义表,和一个方法定义表等

  • C#运行时相互关系

    C#运行时相互关系,包括运行时类型、对象、线程栈和托管堆之间的相互关系,静态方法、实例方法和虚方法的区别等等

  • C#协变和逆变

    “协变”是指能够使用与原始指定的派生类型相比,派生程度更大的类型,“逆变”则是指能够使用派生程度更小的类型

  • C#基础概念之延迟加载

    延迟加载(lazy load)是Hibernate3关联关系对象默认的加载方式,延迟加载机制是为了避免一些无谓的性能开销而提出来的,所谓延迟加载就是当在真正需要数据的时候,才真正执行数据加载操作

  • 使用托管C++粘合C#和C++代码(一)

    C#在xml读写,数据库操纵,界面构造等很多方面性能卓越;C++的效率高,是底层开发的必备武器

  • C#中的索引器的简单理解和用法

    C#中的类成员可以是任意类型,包括数组和集合。当一个类包含了数组和集合成员时,索引器将大大简化对数组或集合成员的存取操作

  • 深入C# 序列化(Serialize)、反序列化(Deserialize)

    C#中的序列化和反序列化,序列化是.NET运行时环境用来支持用户定义类型的流化的机制