`
yangtao309
  • 浏览: 66807 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

java对double型数字进行四舍五入

阅读更多
本文旨在记录自己每天学习和遇到的东西并记录下来
在之前的小测试中遇到需要对double型数字进行四舍五入操作

于是在网络上得到了解决方案~ (在此感谢各位前辈的记叙 呵呵)

   double unit = 12.75;
   System.out.println(new BigDecimal(unit).setScale(2, BigDecimal.ROUND_HALF_UP));


我之前用到的样例
	public static String print(DealControl dc){
		String value = "";
		double total = 0;
		double total_tax = 0;
		for(Product p : dc.items) {
			double price = p.price;
			double rate = p.getRate();
			int count = p.count;
			double unit = price*(1+rate)*count;
			total += unit;
			total_tax += price*rate*count;
			
			//new BigDecimal(unit).setScale(2,BigDecimal.ROUND_HALF_UP)用于对double型数据四舍五入操作
			value += Integer.toString(count) + " " + p.name + 
			":" + new BigDecimal(unit).setScale(2, BigDecimal.ROUND_HALF_UP) + "\n";
		}
		value += "Sales Tax:" + new BigDecimal(total_tax).setScale(2, BigDecimal.ROUND_HALF_UP) + "\n";
		value += "Total:" + new BigDecimal(total).setScale(2, BigDecimal.ROUND_HALF_UP);
		return value;
	}


下面引述了JDK5.0类说明
引用

BigDecimal 类提供以下操作:算术、标度操作、舍入、比较、哈希算法和格式转换。toString() 方法提供 BigDecimal 的规范表示形式。

BigDecimal 类使用户能完全控制舍入行为。如果未指定舍入模式,并且无法表示准确结果,则抛出一个异常;否则,通过向该操作提供适当的 MathContext 对象,可以对已选择的精度和舍入模式执行计算。在任何情况下,可以为舍入控制提供八种舍入模式。使用此类(例如,ROUND_HALF_UP)中的整数字段来表示舍入模式已过时;应改为使用 RoundingMode enum(例如,RoundingMode.HALF_UP)的枚举值。

......


ROUND_HALF_UP的说明
引用

public static final int ROUND_HALF_UP

向“最接近的”数字舍入,如果与两个相邻数字的距离相等,则为向上舍入的舍入模式。如果舍弃部分 >= 0.5,则舍入行为与 ROUND_UP 相同;否则舍入行为与 ROUND_DOWN 相同。注意,这是我们大多数人在小学时就学过的舍入模式。


setScale的说明
引用

public BigDecimal setScale(int newScale,
                           int roundingMode)

返回一个 BigDecimal,其标度为指定值,其非标度值通过此 BigDecimal 的非标度值乘以或除以十的适当次幂来确定,以维护其总值。如果该操作减少标度,则非标度值必须被除(而不是乘),并且该值可以更改;在这种情况下,将指定的舍入模式应用到除法中。
注意,由于 BigDecimal 对象是不可变的,此方法的调用不会 导致初始对象被修改,这与使用名为 setX 变异字段 X 方法的常规约定相反。相反,setScale 返回具有适当标度的对象;返回的对象不一定是新分配的。

相对于此遗留方法,应优先使用新的 setScale(int, RoundingMode) 方法


以上不懂 可以详细翻阅JDK文档
其实也是很简单的 只是平时很少用,一下子也不知道怎么用而已...
分享到:
评论
4 楼 sdylag 2011-10-02  
0.double result = 6.0 / 83; //result  = 0.07228915662650602
1.NumberFormat nf = NumberFormat.getPercentInstance();
2.nf.setMinimumFractionDigits(2);
3.String over = nf.format(result);

直接输出结果为: 7.23%

这个更直接点呵。。。易读。。。
3 楼 RednaxelaFX 2008-12-14  
xjlsgcjdtc 写道
最简单的方法:
int a = (int)(unit + 0.5) ;
print(a) ;

嗯。这个方法在标准库里也有封装好的版本,java.util.Math.round()。
2 楼 yangtao309 2008-12-09  
引用

最简单的方法:
int a = (int)(unit + 0.5) ;
print(a) ;


确实该方法很简单,...
1 楼 xjlsgcjdtc 2008-12-08  
最简单的方法:
int a = (int)(unit + 0.5) ;
print(a) ;

相关推荐

    java猜数字游戏java猜数字游戏.doc

    2. Math.round() 方法:将一个 double 型数据四舍五入为 long 型数据。 3. Scanner 类:用于获取用户的输入。 4. 循环结构:while 循环和 do-while 循环的使用。 5. 判断结构:if-else 语句的使用。 6. 字符串操作:...

    java基础--4.常用类-6.数字

    此外,还有Ceil(向上取整)、Floor(向下取整)和Round(四舍五入)等方法。 在处理大整数或者高精度浮点数时,Java提供了BigInteger和BigDecimal类。这两个类允许我们进行任意精度的算术运算,适合于需要精确计算...

    java保留两位小数问题

    在Java编程中,处理数值型数据时,经常会遇到需要对数字进行格式化的需求,尤其是对于浮点数的操作。本文将深入探讨如何在Java中保留两位小数,并覆盖四舍五入、浮点数精确计算以及避免科学记数法等问题。 #### 四...

    java面试题大全--java基础,struts,spring,ejb等

    - **取小数点前两位并四舍五入**:使用`Math.round()`方法结合数学运算实现,例如: ```java double value = 123.456; double roundedValue = Math.round(value * 100.0) / 100.0; ``` #### 4. 日期和时间 - *...

    double保留小数

    - `BigDecimal.ROUND_HALF_UP`:四舍五入,向“最接近的邻居”舍入,除非两者都同样接近,此时舍入远离零的方向。 - `BigDecimal.ROUND_HALF_DOWN`:五舍六入,向“最接近的邻居”舍入,除非两者都同样接近,此时...

    详解java中float与double的区别

    需要注意的是,float 是 8 位有效数字,第 7 位数字将会产生四舍五入。所以,如果一个 float 变量这样定义:float a=1.32344435; 则第 7 位将产生四舍五入(5 及 5 以下的都将舍去)。 在定义时,float 和 double ...

    java数据类型汇总

    - **浮点数与整数的舍入**:`Math.round()`可以将浮点数转换为整数,同时进行四舍五入。 理解这些转换规则对于编写高效且无错的Java代码至关重要。在编程实践中,要特别注意数据类型的兼容性和潜在的类型转换问题...

    实习生java面试题集及详细答案

    使用`BigDecimal`进行精确的小数运算和四舍五入: ```java BigDecimal bd = new BigDecimal("3.856"); bd = bd.setScale(2, BigDecimal.ROUND_HALF_UP); System.out.println(bd); ``` ### 日期和时间操作 #### ...

    JAVA面试题最全集.pdf

    3. 数据类型之间的转换:如何将数值型字符转换为数字(Integer、Double),如何将数字转换为字符,如何取小数点前两位并四舍五入。 4. 日期和时间:如何取得年月日、小时分秒,如何取得从1970年到现在的毫秒数,如何...

    Java面试题及答案pdf

    如何取小数点前两位,并四舍五入。 4.日期和时间 如何取得年月日,小时分秒 如何取得从1970年到现在的毫秒数 如何猎取某个日期是当月的最终一天 如何格式化日期 5.数组和集合 6.文件和名目(I/O)操作 如何列出某个名...

    java面试题海pdf

    3.数据类型之间的转换如何将数值型字符转换为数字(Integer,Double)如何将数字转换为字符如何取小数点前两位,并四舍五入。4.日期和时间如何取得年月日,小时分秒如何取得从1970年到现在的毫秒数如何获取某个日期是...

    Java学习笔记,变量和数据类型和运算符

    如果需要进行不产生舍入误差的精确数字计算,需要使用 BigDecimal 类。浮点数比较大小最好使用 Java.math 包下面的两个有用的类。 在 Java 中,变量和数据类型是非常重要的概念,了解 Java 的变量和数据类型是学习 ...

    java数据类型转换.pdf

    如果需要四舍五入,可以先乘以10的适当幂,再进行整数转换,最后除以相同幂。 - 在进行类型转换时,尤其是涉及精度和范围的转换,要谨慎处理可能的异常,如NumberFormatException。 了解和熟练掌握Java中的数据...

    Rounding:舍入程序

    在编程领域,舍入是一种处理数字的技术,它涉及到将一个数四舍五入到更接近的整数或特定的小数位数。在Java中,舍入操作是非常常见的,特别是在进行数学计算、数据处理或者显示结果时。Java提供了一系列的类和方法来...

    Java核心技术介绍-java核心技术讲解word格式可编辑.docx

    Java提供了多种方式来格式化数字,例如保留小数位数并采用四舍五入的方式: ```java public class FormatExample { double f = 111231.5585; public void method1() { BigDecimal bg = new BigDecimal(f); ...

    java面试题答案——面试经典

    - 取小数点前两位并四舍五入:可以先强制类型转换为整数,然后对100取模,再进行四舍五入。 4. **日期和时间处理**: - 获取日期、时间:使用`java.util.Calendar`或`java.time`包中的类。 - 毫秒数:`System....

    社会上常用的Java试题库

    - 取小数点前两位并四舍五入:可以使用Math.round()和DecimalFormat类。 4. **日期和时间**: - 获取年月日、小时分秒:使用java.time包下的LocalDate、LocalTime类。 - 获取从1970年的毫秒数:使用System....

    实习生java面试题集及详细答案1

    System.out.println("四舍五入取整:(3.856)=" + roundedValue); ``` #### 四、日期和时间处理 1. **获取当前时间的年月日时分秒**: - 使用`Date`类的相应方法可以获取这些信息。 - 示例代码: ```java Date...

    java编的计算器(功能还算可以)

    2. **结果格式化**:根据需要,结果可能需要四舍五入,或者保留特定的小数位数。 3. **科学记数法**:当结果过大或过小时,可能需要转换为科学记数法显示。 4. **操作顺序**:如果支持括号,需要实现操作的优先级,...

    2023年开发人员面试宝典Java版.docx

    Math.round() 是 Java 中的数学函数,用于将数字四舍五入。 1.13 构造器是否可以被重写 构造器不能被重写,因为构造器是对象的初始化方法。 1.14 抽象类和接口的区别 抽象类和接口都是 Java 中的抽象类型,但...

Global site tag (gtag.js) - Google Analytics