一、java保留两位小数方式

public static void main(String[] args) {

        System.out.println("=======DecimalFormat(四舍五入,五入可能失败)=========");
DecimalFormat decimalFormat = new DecimalFormat("0.00");
System.out.println(decimalFormat.format(0.235)); //0.23
System.out.println(decimalFormat.format(1.235)); //1.24
System.out.println(decimalFormat.format(2.235)); //2.23
System.out.println(decimalFormat.format(3.235)); //3.23
System.out.println(decimalFormat.format(4.235)); //4.24
System.out.println("保留n为小数,n>=1时和js的toFixed一致"); System.out.println("=======DecimalFormat(默认:ROUND_HALF_EVEN)");
decimalFormat = new DecimalFormat("0");
System.out.println(decimalFormat.format(0.5)); //
System.out.println(decimalFormat.format(1.5)); //
System.out.println(decimalFormat.format(2.5)); //
System.out.println(decimalFormat.format(3.5)); //
System.out.println("不保留小数,向偶数靠近,与toFixed不一致"); System.out.println("=======String.format(四舍五入)=========");
System.out.println(String.format("%.2f",0.235)); //0.24
System.out.println(String.format("%.2f",1.235)); //1.24
System.out.println(String.format("%.2f",2.235)); //2.24
System.out.println(String.format("%.2f",3.235)); //3.24
System.out.println(String.format("%.0f",0.5)); //
System.out.println(String.format("%.0f",1.5)); //
System.out.println(String.format("%.0f",2.5)); //
System.out.println(String.format("%.0f",3.5)); // System.out.println("=======NumberFormat(和DecimalFormat一致)=========");
NumberFormat nf = NumberFormat.getNumberInstance();
nf.setMaximumFractionDigits(2);
System.out.println(nf.format(0.235)); //0.23
System.out.println(nf.format(1.235)); //1.24
System.out.println(nf.format(2.235)); //2.23
System.out.println(nf.format(3.235)); //3.23
System.out.println(nf.format(4.235)); //4.24 nf.setMaximumFractionDigits(0);
System.out.println(nf.format(0.5)); //
System.out.println(nf.format(1.5)); //
System.out.println(nf.format(2.5)); //
System.out.println(nf.format(3.5)); //
System.out.println(nf.format(4.5)); // System.out.println("=======BigDecimal(指定舍入模式,构造函数使用String类型方可精确计算)=========");
System.out.println("ROUND_HALF_DOWN:五舍五点1入");
//BigDecimal bigDecimal = new BigDecimal(1.235); //直接使用double类型计算不对
// System.out.println(bigDecimal.setScale(2,BigDecimal.ROUND_HALF_DOWN).doubleValue()); BigDecimal bigDecimal = new BigDecimal(String.valueOf(0.235));
System.out.println(bigDecimal.setScale(2,BigDecimal.ROUND_HALF_DOWN).doubleValue()); //0.23 bigDecimal = new BigDecimal(1.235+"");
System.out.println(bigDecimal.setScale(2,BigDecimal.ROUND_HALF_DOWN).doubleValue()); //1.23 bigDecimal = new BigDecimal(1.2351+"");
System.out.println(bigDecimal.setScale(2,BigDecimal.ROUND_HALF_DOWN).doubleValue()); //1.24 System.out.println("ROUND_HALF_UP:四舍五入");
//bigDecimal = new BigDecimal(0.235); //直接使用double类型计算不对
// System.out.println(bigDecimal.setScale(2,BigDecimal.ROUND_HALF_UP).doubleValue()); bigDecimal = new BigDecimal(String.valueOf(0.235));
System.out.println(bigDecimal.setScale(2,BigDecimal.ROUND_HALF_UP).doubleValue()); //0.24 bigDecimal = new BigDecimal(1.235+"");
System.out.println(bigDecimal.setScale(2,BigDecimal.ROUND_HALF_UP).doubleValue()); //1.24
}

二、js保留两位小数

在Google Chrome和Safari浏览器测试的结果

0.235.toFixed(2); //0.23
1.235.toFixed(2); //1.24
2.235.toFixed(2); //2.23
3.235.toFixed(2); //3.23
4.235.toFixed(2); //4.24 0.5.toFixed(0); //1
1.5.toFixed(0); //2
2.5.toFixed(0); //3
3.5.toFixed(0); //4

总结:

1.当保留至少一位小数时,js的toFixed方式与java的DecimalFormat和NumberFormat方式一致,结果不确定,四舍五可能不入!当不保留小数时,两种算法不一致,js四舍五入,java四舍五取偶。

2.java可以做到精确的四五五入可采用String.format方式和BigDecimal的ROUND_HALF_UP方式,但是必须确保BigDecimal的构造参数为String类型,否则也会发生五不入现象。

3.js精确四舍五入实现方法,网上找到的例子,如下

//覆盖默认的toFixed函数
Number.prototype.toFixed = function(s)
{
return (parseInt(this * Math.pow(10,s) + 0.5)/Math.pow(10,s)).toString();
}  

所以,如果保持前后台计算一致,则有如下方案

前端    后台    结果 
toFixed(n); n>=1 DecimalFormat or NumberFormat   不精确四舍五入,但结果一致
toFixed(0); String.format("%.0f",0.5) 或者 BigDecimal使用ROUND_HALF_UP模式  精确四舍五入,结果一致
改进后的toFixed String.format 或者 BigDecimal使用ROUND_HALF_UP模式  精确四五五入,结果也一致

由于浏览器的多样性,数据的无限性,没有做过多测试,这只是初步结论。要确保万无一失,还是由一处计算方为上策!

java保留两位小数和js保留两位小数一致性研究的更多相关文章

  1. js保留两位小数

    js保留两位小数四舍五入: (Math.floor(until_price*100)/100).toFixed(2);//会四舍五入   保留两位小数 且不四舍五入(三种方式,请用最后一种): var ...

  2. (转)JS保留两位小数 四舍五入函数

    本文转载自:http://www.cnblogs.com/446557021/archive/2011/10/13/2211047.html js 四舍五入函数 toFixed(),里面的参数 就是保 ...

  3. JS保留两位小数 四舍五入函数

    js 四舍五入函数 toFixed(),里面的参数 就是保留小数的位数. <script language="javascript"> document.write(& ...

  4. js保留两位小数方法总结

    js保留两位小数方法总结 最近在做结算系统,经常需要用到金额保留两位小数,刚开始我一直用的是Angular中的过滤器number |2,但是,这无法满足我的需求.问题是,当用户离开文本框时,我需要将用 ...

  5. Java 两个整数相除保留两位小数,将小数转化为百分数

    Java 两个整数相除保留两位小数,将小数转化为百分数 源于:http://blog.sina.com.cn/s/blog_624d755d0101cvuq.html 后来学习了:http://blo ...

  6. 公共的强制保留两位小数的js方法

    强制保留两位小数的js方法 //写一个公共的强制保留两位小数的js方法 function toDecimal2 (x) { var f = parseFloat(x) if (isNaN(f)) { ...

  7. js保留两位小数的方法

    js保留两位小数的方法如下 1.toFixed()方法 需注意,保留两位小数,将数值类型的数据改变成了字符串类型 2.Math.floor(),不四舍五入 ,向下取整 注意,不改变数据类型 3.字符串 ...

  8. JS保留两位小数 [转]

    js保留2位小数toFixed(xxxx) var a = 9.39393; alert(a.toFixed()); alert(Number.toFixed(9.39393)); 返回的是9. 对于 ...

  9. js保留两位小数数字

    /* * @descript: 保留两位小数,如果小数点大于两位小数,就向上取值保留两位小数<br/> * @time 2016-07-13 */function mathCeil(num ...

随机推荐

  1. jQuery调用Asp.Net后台方法

    常用的ajax就不讲了,这里主要是说通过ajax调用asp.net后台的cs文件暴露的方法. 前台: <%@ Page Language="C#" AutoEventWire ...

  2. 解决 配置springmvc拦截所有请求后请求静态资源404的问题

    <servlet-mapping> <servlet-name>spring-servlet</servlet-name> <url-pattern>/ ...

  3. C#中二进制、十进制和十六进制互相转换的方法

    二进制在C#中无法直接表示,我们一般用0和1的字符串来表示一个数的二进制形式.比如4的二进制为"100".下面介绍C#里面用于进制转换的方法. 十进制转换为二进制(int--> ...

  4. 前端项目模块化的实践3:使用 TypeScript 的收益

    以下是关于前端项目模块化的实践,包含以下内容: 搭建 NPM 私有仓库管理源码及依赖: 使用 Webpack 打包基础设施代码: 使用 TypeScript 编写可靠类库 使用 TypeScript ...

  5. RabbitMq基础教程之基本概念

    RabbitMq基础教程之基本概念 RabbitMQ是一个消息队列,和Kafka以及阿里的ActiveMQ从属性来讲,干的都是一回事.消息队列的主要目的实现消息的生产者和消费者之间的解耦,支持多应用之 ...

  6. Monkey稳定性测试

    1.环境准备:Android SDK环境配置 2.手机连接/模拟器连接 : 1)手机打开开发者模式并允许USB连接 2)校验手机是否连接:打开cmd 输入 adb devices 3.查找apk包名及 ...

  7. 浅谈SVG(可缩放的矢量图形)

    前一段项目中用到了svg图片就和其他的元素一样 直接引用就可以展示在页面上,因为项目紧张没有仔细的研究,最近在扩展自己的基础知识,偶然看到了这个东西,于是总结了一些博客园中关于这个svg的基础知识,只 ...

  8. [!] CocoaPods could not find compatible versions for pod "Folly"问题举例

    $ pod install 后出现下面错误: [!] CocoaPods could not find compatible versions for pod "Folly": I ...

  9. 【Alpha】第十次Scrum meeting

    姓名 今日完成任务 所耗时间 刘乾 使用jinja2引擎成功做出第一个模板py文件和latex文件!这是零的突破!(途中遇到很多坑我也就不吐槽了,真是理想与现实差距满满啊) Issue链接:https ...

  10. C++:同名隐藏和赋值兼容规则

    一.同名隐藏 同名隐藏,即在C++的继承中,只要子类的函数名和父类的函数名相同,子类中的函数将会隐藏所有父类中和子类的成员函数同名的函数 特别注意: 和函数之间的重载不同,这里只要求函数的名字相同,而 ...