- 浏览: 123638 次
- 性别:
- 来自: 成都
文章分类
- 全部博客 (47)
- 前端开发 (11)
- 数据库 (12)
- mongodb mongo 数据库 操作 (1)
- java (31)
- sping (6)
- hibernate (6)
- 博客 (1)
- 借鉴 (1)
- lhgdialog (1)
- jequery (3)
- struts2 (8)
- CXF (1)
- WEBSERVICE (3)
- SSH (9)
- 工具类 (4)
- email (1)
- 邮件 (1)
- 发送 (1)
- db2查询 (2)
- 日期对比 (1)
- lucence (1)
- js (2)
- 浮动 (1)
- 弹出层 (1)
- oracle (6)
- mysql (2)
- 进程 (1)
- windows (1)
- axis (1)
- 存储过程 (1)
- 游标 (1)
- oracle,游标 (1)
最新评论
-
xiangyongit:
新手看不懂呀,能不能稍微加些备注
js实现点击复制 -
小二黑:
mark 0000
dwr基于struts2和spring2.5的配置详解 -
QuarterLifeForJava:
不错,虽然有点少 。谢谢分享。
SSH框架常用一些工具类整理
BigDecimal在实际项目的应用及遇到的问题
2013-03-28 11:37 2044人阅读 评论(0) 收藏 举报
我们都知道,java中对大小数,高精度的计算都会用到BigDecimal.但是在实际应用中,运用BigDecimal还是会遇到一些问题.下面说一下我在项目中怎么样BigDecimal和遇到的一些问题.
1. 对商品的价格进行格式化,比如所有商品的价格保留两位小数
Java代码 收藏代码
/**
*
* @param bd 商品的价格
* @param num 保留几位小数,如num = 2
* @return
*/
public static String formatPrice(BigDecimal bd,int num){
if(bd == null || num < 0){
return null;
}
bd = bd.setScale(num, BigDecimal.ROUND_HALF_UP);
return bd + "";
}
其中BigDecimal.ROUND_HALF_UP表示采用"四舍五入"的模式处理价格
2. 将商品的价格由元转为分,便于前端分隔展现
Java代码 收藏代码
/**
* 元转换为分
* @param bd 商品的价格
* @return
*/
public static String yuanToCent(BigDecimal bd){
if(bd == null){
return null;
}
bd = bd.multiply(new BigDecimal(100)).setScale(0, BigDecimal.ROUND_HALF_EVEN);
return bd + "";
}
其中setScale(0, BigDecimal.ROUND_HALF_EVEN)表示采用"四舍五入"的模式处理价格,并且结果不保留小数.
3. 获取缓存命中率
Java代码 收藏代码
/**
* 缓存命中率
* @return
*/
public static String getHitRate(){
BigDecimal a = new BigDecimal(cacheCount.longValue()*100);
BigDecimal b = new BigDecimal(sumCount.longValue());
if(sumCount.longValue() > 0){
return "%" + (a.divide(b, 2, BigDecimal.ROUND_HALF_EVEN));
}
return "0";
}
4. BigDecimal中对于等于"0"的判断
在 BigDecimal中,new BigDecimal("0")与new BigDecimal("0.0"),new BigDecimal(0)与new BigDecimal("0.0")都是不等的.但是本质上,它们都是"0".怎么对是否等于"0"进行判断?将BigDecimal类型的值转换为double类型进行比较或通过上面的方法yuanToCent转换一下比较就能解决这个问题.
5. 用BigDecimal进行除法计算时抛出java.lang.ArithmeticException: Non-terminating decimal expansion; no exact representable decimal result异常.
比如用new BigDecimal(30).divide(new BigDecimal(7))就会抛这个异常,异常原因:BigDecimal的divide方法进行除法时当不整除,出现无限循环小数时,就会抛这个异常.
解决办法:给divide设置精确的小数点位数或"舍入"模式,如
new BigDecimal(30).divide(new BigDecimal(7),BigDecimal.ROUND_HALF_UP).setScale(2,BigDecimal.ROUND_HALF_UP)或
new BigDecimal(30).divide(new BigDecimal(7),2,BigDecimal.ROUND_HALF_UP)
建议采用第二种方式,因为第二种方式的结果精度更高
另外,要注意BigDecimal跟String一样,是不可改变的,比如BigDecimal对象执行setScale(), add()等操作都会返回一个新的BigDecimal.
发表评论
-
myeclipse根据wsdl文件生成webservice服务端
2017-05-22 11:38 1139java开发会经常涉及到接口开发,有时候会涉及调用对方提供 ... -
spring+mybatis+mysql示例
2017-03-02 14:06 541简单的增删查改spring + mybatis + ... -
java调用存储过程并封装成map
2016-10-21 10:20 1936public List<Map<String , ... -
axis调用webservice相关工具类
2016-10-21 10:15 6531、axis调用webservice的方法 publi ... -
javaweb工程服务器配置域名访问
2016-02-03 16:28 32091、申请域名: 例:www.baidu.com 2、apa ... -
java调用webservice接口
2016-01-19 11:56 0package com.mvc.controller; ... -
maven搭建javaweb项目
2015-06-19 15:08 539见链接:http://www.cnblogs.com/xdp- ... -
java数据库连接池操作
2015-06-19 13:57 714一、应用程序直接获取 ... -
java操作系统的进程
2014-06-13 14:07 7251、windows下调用dos命令,很简单的java代码: ... -
DB2、oracle和mysql语句的日期对比及字符串截取
2014-06-13 10:07 3363一、在数据库查询中,我们会经验遇到日期的对比,在常用数据库中, ... -
java字符串过滤回车和换行符
2014-01-14 15:20 22913//第一种方式 import java.util.reg ... -
oracle常用功能语句
2013-12-23 14:25 717<!--新建用户--> create ... -
java获取随机数
2013-12-17 16:50 17151、获取num个不大于range的随机数 /** * ... -
基于数据库lucence 3.6.2多字段配合多关键字的模糊查询
2013-12-06 10:52 1101一、首先是从数据库查询数据并添加索引 /** * 写 ... -
db2日期对比的sql,并读取xml字段数据
2013-12-06 10:47 819date(char(XML2CLOB( xmlquery( ... -
java打开拼接的rul链接并带上参数
2013-11-26 09:50 1059//判断当前系统是否支持Java AWT Desktop ... -
java调用windows应用程序
2013-11-20 11:35 789public static void main(Strin ... -
hibernate的hql查询多对多查询
2013-11-08 12:04 3986在hibernate的hql查询中,假如说分组信息与试 ... -
struts2的基于拦截器的权限设计
2013-09-22 17:21 9591、struts-config.xml中的配置 <p ... -
java的oracle数据库用hql语句(orcal)对日期进行范围对比
2013-09-22 17:12 4253/**取当前时间30分钟前的*/ Date date = ...
相关推荐
在JavaScript中,大数计算通常会遇到精度问题,因为JavaScript的Number类型在处理超过一定位数的数值时会出现精度丢失。为了解决这个问题,开发者引入了BigDecimal库,它提供了高精度的大数运算支持。"js_bigdecimal...
BigDecimal 类在 Java 中被设计用来处理高精度的浮点数运算,主要应用于财务、金融等领域,因为这些场景中对精度要求非常高。BigDecimal 提供了加法(add())、减法(subtract())、乘法(multiply())和除法...
在进行商业计算时,由于浮点数(double和float)存在精度问题,不能保证准确的结果,因此通常推荐使用BigDecimal来确保计算的精确性。本文将深入探讨BigDecimal的基本操作、应用场景及注意事项。 首先,创建...
`BigDecimal`类则用于处理高精度的浮点数运算,它解决了`float`和`double`类型存在的精度问题。`BigDecimal`的构造方法同样接受字符串,或者可以通过`BigInteger`来创建: ```java BigDecimal bigDec = new ...
在实际应用中,使用这样的库可以避免JavaScript原生数据类型带来的精度问题。例如,在电商网站进行价格计算时,可以确保小数部分的正确性,防止因精度问题导致的金额计算错误。在科学计算中,高精度的BigDecimal运算...
在本案例中,开发者遇到的问题是,前端期望从后端获取的JSON数据中,BigDecimal类型的数值能够保留两位小数,但实际返回的数据丢失了小数部分。 问题的根源在于,默认情况下,Jackson在序列化BigDecimal到JSON字符...
`BigDecimal` 是为那些需要精确数值计算的场景设计的,比如金融计算或会计应用,因为普通的 `float` 和 `double` 类型在进行大数或高精度计算时会存在精度损失。 当需要进行加减乘除操作时,`BigDecimal` 不支持...
今天我们将深入探讨如何将`BigDecimal`对象转换为`String`,以及在这个过程中可能遇到的问题和解决方案。 首先,`BigDecimal`到`String`的最直接转换方式是使用`toString()`方法。这个方法会以标准的十进制格式返回...
这个压缩包包含了作者在书中提到的一些示例代码,通过分析和实践这些代码,我们可以深入理解这些最佳实践,并将其应用到实际的Java项目中。以下是关于这些经验法则的详细解释: 1. **使用接口而非具体类(Item 2)*...
在实际应用中,`BigDecimal`不仅可以用于基本的数学运算,还可以用于金融、财务等需要精确计算的场景。其灵活性和可配置性使得我们可以根据需求调整精度和舍入策略,避免了由于浮点数运算导致的不准确性。在处理大数...
在实际应用中,尤其是在财务计算、科学计算等领域,这种能够处理边缘情况的类是非常有价值的。 为了进一步了解Calculator的具体实现和用法,你可以查看名为`Calculator-master`的压缩包文件,其中应该包含了...
在实际应用中,为了确保商业运算的精确性,建议始终使用`BigDecimal(String)`构造器来创建`BigDecimal`实例,并且谨慎处理类型转换。`BigDecimal`虽然提供了精确计算的能力,但它的性能相对较低,不适合大量快速计算...
在VB6.0编程环境中,我们经常会遇到比较两个数值大小的情况。这通常涉及到基本的逻辑判断,例如小于、大于和等于。在这个“两个数判断:小于、大于、等于程序”中,我们将深入探讨如何利用VB6.0的源代码来实现这样的...
在Java编程中,浮点数运算常常会遇到精度问题,这是由于浮点数在计算机内部的存储方式导致的。为了确保浮点数运算的准确性,开发者需要采取特定的方法。以下将详细阐述这个问题,并提供正确的处理策略。 首先,理解...
在实际应用中,可以提供工具类来进行精确的浮点数运算,包括加减乘除和四舍五入。例如: import java.math.BigDecimal; public class ArithUtil { private static final int DEF_DIV_SCALE = 6; // 默认除法运算...
在实际项目中,开发者可能需要结合这些操作来实现更复杂的计算逻辑。此外,为了优化性能,避免不必要的内存分配,还可以利用BigDecimal的静态方法`valueOf()`来复用已存在的BigDecimal对象。 总之,通过BigDecimal...
然而,在实际应用中,我们可能需要同时处理这两种类型的大数,这时`bigNumber`库就显得尤为重要。 `bigNumber`库是一个Java库,它的设计目标是将`BigInteger`和`BigDecimal`的功能集成在一起,使得开发者能够更方便...
在Java编程中,使用`float`和`double`类型进行浮点数计算时经常会遇到精度丢失的问题。这是因为浮点数在计算机内部是以二进制形式存储的,而某些十进制小数无法用二进制精确表示,从而导致计算结果出现误差。例如,`...
Java编程语言在实际应用中经常会遇到各种问题,尤其是在处理字符编码、数据取整以及用户交互等方面。以下是对这些常见问题的详细分析和解决方案。 一、Jsp 页面中 request 获取的中文参数是乱码 在Java Web开发中...
这个报告详细介绍了这样一个计算器项目的实施过程,涵盖了设计思路、实现方法和实验结果,同时也包含了设计者在实践过程中遇到的问题和解决策略。 1. **课题概述** 1.1 **课题任务**:本项目的任务是构建一个功能...