`
jslfl
  • 浏览: 324462 次
  • 性别: Icon_minigender_1
  • 来自: 成都
社区版块
存档分类
最新评论

浮点数计算BigDecimal 及精度/舍入

阅读更多
涉及小数的计算,最好都统一用BigDecimal来处理,保证运算精度
在构建BigDecimal时,用字符串做参数,其它方式会有精度问题
BigDecimal bd= new BigDecimal("123456789.11112233");

//方法
add()
subtract()
multiply()
divide()

//格式化
NumberFormat nf = NumberFormat.getNumberInstance() ;
nf.setMaximumFractionDigits(2) ;
nf.setMinimumFractionDigits(2);

nf.format(bd);

//大小比较
if(a.compareTo(b) == -1){
//<
}else if(a.compareTo(b) == 0){
//==
}else if(a.compareTo(b) == 1){
//>
}

//小数四舍五入模式
BigDecimal b = new BigDecimal("123.6779");
System.out.println(b.setScale(2, BigDecimal.ROUND_DOWN));//向下舍入 123.67


手机号13777777777,如果是为Double类型接收,就会自动转为科学计数法,可这样处理


一般是Double转String,方法一般有两种:

1.利用String.format()

saleUnilateImport.setPhone(String.format("%.4f", row.getCell(1).getNumericCellValue()));//15145117218.0000保留4位小数

String.format("%.0f", row.getCell(0).getNumericCellValue())//15145117218,取整!

2.利用DecimalFormat类

DecimalFormat df = new DecimalFormat("#");//转换成整型
saleUnilateImport.setPhone(df.format(row.getCell(1).getNumericCellValue()));



3.利用DecimalFormat类

DecimalFormat df = new DecimalFormat("#,##0.00");//保留两位小数且不用科学计数法saleUnilateImport.setPhone(df.format(row.getCell(1).getNumericCellValue()));


格式化类,
DecimalFormat格式化double
SimpleDateFormat格式化Date

DecimalFormat   df   =   new   DecimalFormat( "#,##0.00 ");
//保留两位小数且不用科学计数法,并使用千分位
String   value   =   df.format(d);


不用科学计数法
NumberFormat n = NumberFormat.getInstance();
n.setGroupingUsed(false);
n.setMaximumFractionDigits(100);
System.out.println(n.format(0.0000001));//0.0000001
分享到:
评论

相关推荐

    解决javascript中的浮点数计算不精确问题

    1. **四舍五入**:使用`Math.round()`、`Math.floor()`或`Math.ceil()`对结果进行四舍五入,以减少不精确性的影响。 2. **比较阈值**:在比较浮点数时,不是直接使用`===`,而是设定一个很小的阈值(如`Number....

    BigDecimal加减乘除计算

    在进行高精度计算时,BigDecimal 避免了浮点数计算的精度问题,提供了更精确的结果。需要注意的是,所有涉及到 BigDecimal 的运算都会创建新的对象,所以频繁操作可能会带来性能影响。为了优化性能,可以使用 `...

    BigDecimal的计算

    通过使用 `BigDecimal`,可以避免由于二进制浮点数的有限精度带来的舍入误差问题。 ##### 2. 构造方法与静态工厂方法 `BigDecimal` 提供了多种构造方法以及一些静态工厂方法用于创建实例。例如: - `new BigDecimal...

    浮点数计算为什么会出错

    浮点数计算错误是计算机科学中的一个经典问题,它源于计算机用二进制格式存储数字的方式,以及二进制在表示某些十进制小数时的局限性。首先,需要了解的是,浮点数不是计算机中用于表示小数的精确方式。计算机使用的...

    Java-关于基本数据类型中浮点数计算产生的精度问题

    BigDecimal类是一个大小数操作类,可以用来对超过16位有效位的数据进行精确的运算,在这里我们使用BigDecimal类来解决浮点数计算产生的精度丢失问题。 精度问题 在这里我们讨论一个问题:3 – 2.7 == 0.3 的值是什么...

    javascript版BigDecimal类库

    JavaScript版的`BigDecimal`类库是基于Java原版`BigDecimal`的改编,旨在提供与Java版本相似的功能,以支持大整数和任意精度的浮点数计算。这个库通常包含以下关键特性: 1. **构造函数**:创建一个`BigDecimal`...

    MyEditTextApplication输入框BigDecimal计算价格

    BigDecimal是Java提供的一个大数类,它可以用来进行精确的浮点数运算,避免了传统浮点数运算中可能出现的精度损失问题。在金融或会计系统中,对数据的精度要求很高,BigDecimal就成为首选的数据类型。 在...

    BigDecimal计算

    由于浮点数(如`float`和`double`)在计算机中是以近似值存储的,这可能导致计算结果的不精确性,尤其是在进行货币计算时。`BigDecimal`解决了这个问题,提供了精确的十进制运算。 `BigDecimal`对象由一个非空的十...

    Java实现的浮点类的精确计算

    在编程领域,浮点数计算由于涉及到二进制表示法,常常会出现精度丢失的问题,这在需要精确计算的场景下尤为棘手。Java作为一种广泛使用的编程语言,也面临同样的挑战。为了解决这个问题,我们可以利用特定的设计和...

    运用BigDecimal精确计算

    在Java编程语言中,进行高精度的数学运算时,我们常常会遇到浮点数计算的精度问题。浮点数在计算机中的表示并非完全精确,这可能导致在财务或科学计算中出现不期望的误差。为了解决这个问题,Java提供了`BigDecimal`...

    Java中实现浮点数的精确计算

    在Java编程中,使用`float`和`double`类型进行浮点数计算时经常会遇到精度丢失的问题。这是因为浮点数在计算机内部是以二进制形式存储的,而某些十进制小数无法用二进制精确表示,从而导致计算结果出现误差。例如,`...

    java BigDecimal操作

    在Java编程语言中,BigDecimal类是用于处理高精度、大范围浮点数的工具,它在需要精确计算的场景下非常关键。BigDecimal提供了避免浮点数运算中的精度损失的方法,适用于金融、会计等对精度有严格要求的领域。这篇...

    高精度JSBigDecimal运算

    在JavaScript(JS)中,由于其内置的数据类型限制,进行大数或高精度计算...在使用这些库时,需要注意正确地导入和初始化,理解其提供的API,以及根据实际需求配置计算的精度和舍入规则,以确保计算的准确性和可靠性。

    BigDecimal-CPP-master.zip

    BigDecimal是一种可以处理任意精度的十进制浮点数的数据类型,它通常用于金融或会计等需要高精度计算的领域,因为在这些场景中,浮点数的精度丢失可能导致错误的结果。 在计算机科学中,浮点数(如`float`和`double...

    JAVA浮点数计算精度损失底层原理与解决方案

    1. 使用`java.math.BigDecimal`类:`BigDecimal`是Java提供的一种高精度的浮点数表示方式,它可以提供任意精度的运算,避免了浮点数计算的精度损失。在进行商业计算或者需要精确结果的场景中,推荐使用`BigDecimal`...

    Java使用BigDecimal进行高精度计算的示例代码

    因此,在进行高精度计算时,需要使用 BigDecimal 类来避免舍入误差。 首先,为什么浮点数不是精确值?根据 IEEE 754 标准,浮点数用科学记数法以底数为 2 的小数来表示,包括 1 位表示数字的符号、8 位表示指数、23...

    bigdecimal

    2. **舍入模式**: `BigDecimal.ROUND_HALF_UP` 表示四舍五入模式,这是最常见的舍入方式。`BigDecimal` 还提供了其他多种舍入模式,如 `ROUND_DOWN`、`ROUND_UP` 等,可以根据具体需求选择。 3. **异常处理**: 当 `...

    浮点数精度问题

    在给定的`DoubleUtil.java`文件中,可能包含了一些处理浮点数精度问题的实用工具方法,比如四舍五入、比较或转换为特定精度的字符串。通过阅读和理解这些方法,我们可以学习到更多关于如何在实际编程中应对浮点数...

    JS浮点数字操作插件floatOPS.js

    它可能采用了如BigDecimal或BigNumber类的实现方式,这些类通常使用字符串或数组存储浮点数,避免了二进制浮点数的精度限制。在进行加减乘除运算时,floatOPS.js会将每个操作数转换为高精度的表示,然后进行精确的...

    BigDecimal详解、代码示例和经常遇到的坑

    与基本数据类型`float`或`double`相比,`BigDecimal`能够提供更为准确的计算结果,避免因浮点数计算导致的精度丢失问题。 **主要特点:** 1. **任意精度**:`BigDecimal`可以存储和处理非常大的数值以及任意长度的...

Global site tag (gtag.js) - Google Analytics