本文旨在记录自己每天学习和遇到的东西并记录下来
在之前的小测试中遇到需要对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文档
其实也是很简单的 只是平时很少用,一下子也不知道怎么用而已...
分享到:
相关推荐
2. Math.round() 方法:将一个 double 型数据四舍五入为 long 型数据。 3. Scanner 类:用于获取用户的输入。 4. 循环结构:while 循环和 do-while 循环的使用。 5. 判断结构:if-else 语句的使用。 6. 字符串操作:...
此外,还有Ceil(向上取整)、Floor(向下取整)和Round(四舍五入)等方法。 在处理大整数或者高精度浮点数时,Java提供了BigInteger和BigDecimal类。这两个类允许我们进行任意精度的算术运算,适合于需要精确计算...
在Java编程中,处理数值型数据时,经常会遇到需要对数字进行格式化的需求,尤其是对于浮点数的操作。本文将深入探讨如何在Java中保留两位小数,并覆盖四舍五入、浮点数精确计算以及避免科学记数法等问题。 #### 四...
- **取小数点前两位并四舍五入**:使用`Math.round()`方法结合数学运算实现,例如: ```java double value = 123.456; double roundedValue = Math.round(value * 100.0) / 100.0; ``` #### 4. 日期和时间 - *...
- `BigDecimal.ROUND_HALF_UP`:四舍五入,向“最接近的邻居”舍入,除非两者都同样接近,此时舍入远离零的方向。 - `BigDecimal.ROUND_HALF_DOWN`:五舍六入,向“最接近的邻居”舍入,除非两者都同样接近,此时...
需要注意的是,float 是 8 位有效数字,第 7 位数字将会产生四舍五入。所以,如果一个 float 变量这样定义:float a=1.32344435; 则第 7 位将产生四舍五入(5 及 5 以下的都将舍去)。 在定义时,float 和 double ...
- **浮点数与整数的舍入**:`Math.round()`可以将浮点数转换为整数,同时进行四舍五入。 理解这些转换规则对于编写高效且无错的Java代码至关重要。在编程实践中,要特别注意数据类型的兼容性和潜在的类型转换问题...
使用`BigDecimal`进行精确的小数运算和四舍五入: ```java BigDecimal bd = new BigDecimal("3.856"); bd = bd.setScale(2, BigDecimal.ROUND_HALF_UP); System.out.println(bd); ``` ### 日期和时间操作 #### ...
3. 数据类型之间的转换:如何将数值型字符转换为数字(Integer、Double),如何将数字转换为字符,如何取小数点前两位并四舍五入。 4. 日期和时间:如何取得年月日、小时分秒,如何取得从1970年到现在的毫秒数,如何...
如何取小数点前两位,并四舍五入。 4.日期和时间 如何取得年月日,小时分秒 如何取得从1970年到现在的毫秒数 如何猎取某个日期是当月的最终一天 如何格式化日期 5.数组和集合 6.文件和名目(I/O)操作 如何列出某个名...
3.数据类型之间的转换如何将数值型字符转换为数字(Integer,Double)如何将数字转换为字符如何取小数点前两位,并四舍五入。4.日期和时间如何取得年月日,小时分秒如何取得从1970年到现在的毫秒数如何获取某个日期是...
如果需要进行不产生舍入误差的精确数字计算,需要使用 BigDecimal 类。浮点数比较大小最好使用 Java.math 包下面的两个有用的类。 在 Java 中,变量和数据类型是非常重要的概念,了解 Java 的变量和数据类型是学习 ...
如果需要四舍五入,可以先乘以10的适当幂,再进行整数转换,最后除以相同幂。 - 在进行类型转换时,尤其是涉及精度和范围的转换,要谨慎处理可能的异常,如NumberFormatException。 了解和熟练掌握Java中的数据...
在编程领域,舍入是一种处理数字的技术,它涉及到将一个数四舍五入到更接近的整数或特定的小数位数。在Java中,舍入操作是非常常见的,特别是在进行数学计算、数据处理或者显示结果时。Java提供了一系列的类和方法来...
Java提供了多种方式来格式化数字,例如保留小数位数并采用四舍五入的方式: ```java public class FormatExample { double f = 111231.5585; public void method1() { BigDecimal bg = new BigDecimal(f); ...
- 取小数点前两位并四舍五入:可以先强制类型转换为整数,然后对100取模,再进行四舍五入。 4. **日期和时间处理**: - 获取日期、时间:使用`java.util.Calendar`或`java.time`包中的类。 - 毫秒数:`System....
- 取小数点前两位并四舍五入:可以使用Math.round()和DecimalFormat类。 4. **日期和时间**: - 获取年月日、小时分秒:使用java.time包下的LocalDate、LocalTime类。 - 获取从1970年的毫秒数:使用System....
System.out.println("四舍五入取整:(3.856)=" + roundedValue); ``` #### 四、日期和时间处理 1. **获取当前时间的年月日时分秒**: - 使用`Date`类的相应方法可以获取这些信息。 - 示例代码: ```java Date...
2. **结果格式化**:根据需要,结果可能需要四舍五入,或者保留特定的小数位数。 3. **科学记数法**:当结果过大或过小时,可能需要转换为科学记数法显示。 4. **操作顺序**:如果支持括号,需要实现操作的优先级,...
Math.round() 是 Java 中的数学函数,用于将数字四舍五入。 1.13 构造器是否可以被重写 构造器不能被重写,因为构造器是对象的初始化方法。 1.14 抽象类和接口的区别 抽象类和接口都是 Java 中的抽象类型,但...