`

BigDecimal保留小数常用操作

阅读更多
BigDecimal除法操作处理保留两位小数操作处理:

方式一:

四舍五入  
double   f   =   111231.5585;  
BigDecimal   b   =   new   BigDecimal(f);  
double   f1   =   b.setScale(2,   BigDecimal.ROUND_HALF_UP).doubleValue();  
保留两位小数  
---------------------------------------------------------------  

方式二:

java.text.DecimalFormat   df   =new   java.text.DecimalFormat("#.00");  
df.format(你要格式化的数字);

例:new java.text.DecimalFormat("#.00").format(3.1415926)

#.00 表示两位小数 #.0000四位小数 以此类推...

方式三:

double d = 3.1415926;

String result = String .format("%.2f");

%.2f %. 表示 小数点前任意位数   2 表示两位小数 格式后的结果为f 表示浮点型

方式四:

NumberFormat ddf1=NumberFormat.getNumberInstance() ;

void setMaximumFractionDigits(int digits) 
digits 显示的数字位数 
为格式化对象设定小数点后的显示的最多位,显示的最后位是舍入的

import java.text.* ; 
import java.math.* ; 
class TT 
{ 
public static void main(String args[]) 
{ double x=23.5455; 
NumberFormat ddf1=NumberFormat.getNumberInstance() ; 


ddf1.setMaximumFractionDigits(2); 
String s= ddf1.format(x) ; 
System.out.print(s); 
} 

   

BigDecimal除法操作处理

当使用BigDecimal做除法操作时,在加减乘时都没有出现问题,但是到除法运算时,提示了如下错误: Non-terminating decimal expansion; no exact representable decimal result大概的意思是“无法结束的除法表达式;没有精确的除结果”。我当时输入的10/3,结果应该是3.3333....333。 
  
发现我原来的处理方式有问题如下: 
BigDecimal num1 = new BigDecimal("10"); 
BigDecimal num2 = new BigDecimal("3"); 
BigDecimal num3 = num1.divide(num2); 

其实devide的函数定义如下: 

BigDecimal.divide(BigDecimal divisor, int scale, RoundingMode roundingMode) ; 

scale为小数位数; 

roundingMode为小数模式; 

ROUND_CEILING 
如果 BigDecimal 是正的,则做 ROUND_UP 操作;如果为负,则做 ROUND_DOWN 操作。 
ROUND_DOWN 
从不在舍弃(即截断)的小数之前增加数字。 
ROUND_FLOOR 
如果 BigDecimal 为正,则作 ROUND_UP ;如果为负,则作 ROUND_DOWN 。 
ROUND_HALF_DOWN 
若舍弃部分> .5,则作 ROUND_UP;否则,作 ROUND_DOWN 。 
ROUND_HALF_EVEN 
如果舍弃部分左边的数字为奇数,则作 ROUND_HALF_UP ;如果它为偶数,则作   ROUND_HALF_DOWN 。 
ROUND_HALF_UP 
若舍弃部分>=.5,则作 ROUND_UP ;否则,作 ROUND_DOWN 。 
ROUND_UNNECESSARY 
该“伪舍入模式”实际是指明所要求的操作必须是精确的,,因此不需要舍入操作。 
ROUND_UP 
总是在非 0 舍弃小数(即截断)之前增加数字。 
写成如下便可通过 

BigDecimal num3 = num1.divide(num2,10,ROUND_HALF_DOWN);

 

分享到:
评论

相关推荐

    double保留小数

    ### double保留小数知识点 #### 一、概述 在Java编程语言中,处理浮点数时经常需要对结果进行格式化或保留特定位数的小数。例如,在金融计算、科学计算以及任何涉及精度要求较高的场景中,都需要精确控制数字的...

    java代码-BigDecimal 四舍五入保留2位小数. 金额从单位分转成单位元

    本示例代码主要关注如何使用BigDecimal进行四舍五入操作,以保留两位小数,并将金额从单位分转换为单位元。下面将详细解释相关知识点。 1. BigDecimal类: BigDecimal是Java提供的一个大数类,它提供了对任意精度...

    C#保留小数总结

    本文将深入探讨C#中保留小数的方法,包括基础概念、常用方法以及一些实用技巧。 首先,我们需要理解浮点数(如`float`和`double`)在计算机中的表示方式。由于它们是近似值,直接设置小数位数可能不准确。例如,`...

    java 四舍五入保留小数的实现方法

    以下是一些常用的Java四舍五入保留小数的实现方法: ### 方法一:使用`BigDecimal` `BigDecimal`是Java中处理高精度、大范围数值的一个类,它提供了丰富的算术运算方法,包括四舍五入。以下是使用`BigDecimal`进行...

    BigDecimal基本运算介绍

    在示例中,`c = a.divide(b, 2, BigDecimal.ROUND_HALF_UP)` 表示 `a` 除以 `b`,保留两位小数,采用四舍五入的舍入规则。这里的两个参数分别表示: - 第一个参数:`scale`,即小数位数。这里设置为 2,意味着结果...

    Java中保留两位小数的四种方法实现实例

    在Java编程语言中,保留小数位数是一个常见的需求,尤其是在金融或科学计算中。本文将详细介绍四种方法,用于在Java程序中将数值格式化为保留两位小数。这四种方法包括使用DecimalFormat类、String类的format方法、...

    java中BigDecimal进行加减乘除的基本用法

    `divide()` 方法需要指定一个 `scale` 参数(即保留的小数位数)以及 `RoundingMode`(舍入模式)。例如: ```java BigDecimal divResult = BigDecimal甲.divide(BigDecimal乙, scale, RoundingMode.HALF_UP); ``...

    攻克java大数类

    BigDecimal指定小数的保留位数 首先,long的范围是:-2^63 ~ 2^63-1 超过这个范围,就是用大数类,最好用string字符串类型进行接收。 BigInteger常用基本方法 BigInteger(String value): 构造方法,将value字符串...

    详谈Java中BigDecimal的一个除法异常

    然而,在使用`BigDecimal`进行除法操作时,如果不进行特殊处理,可能会遇到`ArithmeticException`异常,这个异常通常会在除法运算产生非终止的小数扩张,即无法精确表示的十进制结果时抛出。 异常信息 "Non-...

    java高精度计算算法与分析

    java高精度计算通常是指使用BigDecimal类来实现高精度计算,通过设置保留的小数位数来控制计算结果的精度。 java高精度计算的重要性 1. 金融应用:在金融应用中,高精度计算是非常重要的,因为小数点后面的一分钱...

    java 四舍五入 需要的朋友看看

    System.out.println("保留两位小数(3.856)=" + new BigDecimal(i).setScale(2, BigDecimal.ROUND_HALF_UP)); } } ``` 上述代码中,`setScale(0, BigDecimal.ROUND_HALF_UP)`会将3.856四舍五入到最接近的整数,...

    android精度显示

    在这个文件中,开发者可能创建了一个方法来处理BigDecimal对象,以便在显示数值时保留特定的位数,尤其是当需要显示0作为尾数时。通常,这会涉及`BigDecimal`的构造函数以及`setScale()`方法的使用。例如: ```java...

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

    对于整数除法,结果总是向下取整为整数,而浮点数除法则保留小数部分。注意,除以零会抛出ArithmeticException异常。 在处理数字时,我们经常需要进行进制转换。例如,将十进制数字转换为二进制、八进制或十六进制...

    float和double

    Math类中的round方法不能设置保留几位小数,我们只能象这样(保留两位):public double round(double value){ return Math.round(value*100)/100.0;}但是,这个方法并不能正常工作,给这个方法传入4.015,它将返回...

    ACM之java速成.pdf

    这将输出数字x,格式分别为保留两位小数和三位小数。 文档还涉及了字符串操作的知识点,包括字符串的访问(charAt())、转换(toCharArray())、子串提取(substring())等方法。例如: ```java String st = ...

    untitled.zip

    如果想保留两位小数并四舍五入,可以使用`DecimalFormat`或`BigDecimal`类。 **天花板函数(Ceiling Function)** 天花板函数返回大于或等于输入值的最小整数。在Java中,`Math.ceil()`方法实现了这个功能。例如,`...

    java做acm题目入门知识

    - `BigDecimal`用于小数的高精度计算。 常用的方法有:`add()`, `subtract()`, `multiply()`, `divide()`, `mod()`, `compareTo()`等。 示例代码: ```java import java.io.*; import java.math.*; public class ...

    Rounding2:继续四舍五入 app 介绍方法和数组

    但如果你需要更精确的控制四舍五入行为,可以使用`BigDecimal`类的`setScale()`方法,它可以设置保留的小数位数,并指定四舍五入模式,如`RoundingMode.HALF_UP`(通常的四舍五入)、`RoundingMode.DOWN`(向下取整...

Global site tag (gtag.js) - Google Analytics