本文讲述Java项目中对金额的处理思考及实践策略;

做电商或者具有交易类需求的项目时,一定会涉及到金额信息的模型,例如账户余额、冻结余额、可用余额、可提现余额等等,所有与钱相关的字段,都可统称为金额信息;

金额信息,至少要从几个维度来考虑设计,首先是数据库存储使用的类型,第二是运算过程如何保证精度,第三是采用何种类型进行页面显示(一般都会有四舍五入、两位小数等需求);

对于存储类型,Mysql可考虑采用Bigint存储,单位是分的整型(也可使用decimal,但是要切记,全局一定要统一,要么全是bigint,要么全是decimal),对应到java实体类是Long类型的变量,运算时全部要采用java的BigDecimal进行(切记,加减乘除任何计算都必须使用),本文的代码实例也是采用的此种方案,下面是一个实际金融项目中用到的一个金额处理工具类,现分享给各位同仁,希望能够对各位有所启发和帮助。

import java.math.BigDecimal;
import java.text.DecimalFormat;/*** 金额转换工具类* @author Administrator**/
public class AmountUtil {/*** 返回单位元的2位小数String值* @param longVal 单位:分* @return*/public static String longToString(long longVal) {BigDecimal bdCent = new BigDecimal(StringUtil.getString(longVal));BigDecimal bd100 = new BigDecimal("100");BigDecimal bdYuan = bdCent.divide(bd100);String str = formatToNumber(bdYuan);return str;}/*** 返回单位元的2位小数String值* @param longVal* @return*/public static String double2p(double doubleVal) {String str = formatToNumber(new BigDecimal(doubleVal));return str;}/*** 1.0~1之间的BigDecimal小数,格式化后失去前面的0,则前面直接加上0。* 2.传入的参数等于0,则直接返回字符串"0.00"* 3.大于1的小数,直接格式化返回字符串* @param obj传入的小数* @return*/public static String formatToNumber(BigDecimal obj) {DecimalFormat df = new DecimalFormat("#.00");if(obj.compareTo(BigDecimal.ZERO)==0) {return "0.00";}else if(obj.compareTo(BigDecimal.ZERO)>0&&obj.compareTo(new BigDecimal(1))<0){return "0"+df.format(obj).toString();}else {return df.format(obj).toString();}}
}

上述代码中用到的StringUtil类:


import java.io.UnsupportedEncodingException;
import java.net.URLEncoder;
import java.security.MessageDigest;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.HashMap;
import java.util.Locale;
import java.util.Map;
import java.util.Set;
import java.util.regex.Matcher;
import java.util.regex.Pattern;/*** 字符串工具类,提供一些字符串相关的便捷方法*/
public class StringUtil {private StringUtil() {throw new AssertionError();}/*** null Object to empty string*    空对象转化成空字符串* <pre>* nullStrToEmpty(null) = "";* nullStrToEmpty("") = "";* nullStrToEmpty("aa") = "aa";* </pre>** @param object 对象* @return String*/public static String getString(Object object) {return object == null ?"" : (object instanceof String ? (String)object : object.toString());}
}

Java 金额信息存储、精度运算及显示的处理相关推荐

  1. java实现次方的运算_【技术干货】Java 面试宝典:Java 基础部分(1)

    海牛学院的 | 第 616 期 本文预计阅读 |18 分钟 Java 基础部分 基础部分的顺序:基本语法,类相关的语法,内部类的语法,继承相关的语法,异常的语法,线程的语法,集合的语法,io 的语法, ...

  2. java类型精度排序,Java中BigDecimal精度和相等比较的坑

    为什么要有bigdecimal ,他是干什么的 float和double类型的主要设计目标是为了科学计算和工程计算.他们执行二进制浮点运算,这是为了在广域数值范围上提供较为精确的快速近似计算而精心设计 ...

  3. 计算价格, java中浮点数精度丢失的解决方案

    计算价格, java中浮点数精度丢失的解决方案 转载于:https://www.cnblogs.com/gloryhope/p/9896719.html

  4. 编写Java程序,在屏幕上显示带标题的窗口,并添加一个按钮。当用户单击按钮时,结束程序。

    编写Java程序,在屏幕上显示带标题的窗口,并添加一个按钮.当用户单击按钮时,结束程序. package p3;import java.awt.event.ActionEvent; import ja ...

  5. java 级数_编写一个Java程序实现级数运算。

    编写一个Java程序实现级数运算.其中:定义级数求和类,以及级数求积(阶乘)类,在项目主类中声明一个级数求和对象和求阶乘对象,由键盘输入级数的n值,并打印出1+2+...+n的和,以及... 编写一个 ...

  6. java金额小写转大写金额_Java金额大小写的转换方法

    本文实例为大家分享了Java金额大小写转换的具体代码,供大家参考,具体内容如下 /** * @ClassName: NumberConvert * @Description: TODO * @date ...

  7. java如何在窗口上显示数据_如何把Java程序窗口在屏幕中间显示

    摘要:这篇Java开发技术栏目下的"如何把Java程序窗口在屏幕中间显示",介绍的技术点是"Java程序.屏幕中间.Java.显示.窗口.中间",希望对大家开发 ...

  8. java 交易金额转换分,java金额元与分转换工具种

    java金额元与分转换工具类 java金额元与分转换的一个工具类. 1.元转分: 可传入字符串或者long型(隐式转换为long型也可)整数. 若传入为字符串,则通过替换小数点的方式转换,小数点有多位 ...

  9. Java中「与运算,或运算,异或运算,取反运算。」

    Java中「与运算,或运算,异或运算,取反运算.」 文章目录 Java中「与运算,或运算,异或运算,取反运算.」 Java中的「与运算(AND) & 」 规则 :都为1时才为1,否则为0 Ja ...

最新文章

  1. 365个机器学习概念,“耐撕”的AI日历限量预售 | 新年礼物嗷~
  2. 微软拼音输入法2007状态栏无法显示!
  3. 注册与验证码php源代码,PHP验证码处理源代码
  4. 开灯问题 简单模拟法
  5. (八)整合spring cloud云服务架构 - commonservice-eureka 项目构建过程
  6. oracle测试表什么名字,Oracle_PLSQL测试题与答案(绝对经典)
  7. PLSQL中Database怎么填
  8. Replace Type Code with State/Strategy(以State/Strategy取代类型码)
  9. Tomcat(四):发布和优化
  10. 转数组_Java中IO必杀技-文件转字节数组
  11. 数据化风控中的核心指标与报表汇总
  12. 如何用EasyRecovery找回已经删除的图片?
  13. 遮罩层 fixed 在 ie 里无法显示
  14. 13、XSI,信号量简介
  15. Java三大特性详解
  16. python deap_在Python中用DEAP绘制多目标pareto边界
  17. 零基础快速学会用spss分析问卷
  18. 信息安全应急预案整理
  19. android 点阵字库
  20. win8 计算机组策略,win8系统安装软件提示“组策略阻止了这个程序”的解决方法...

热门文章

  1. python发微信提醒天气_基于Python实现定时自动给微信好友发送天气预报
  2. 二维小波变换_小波变换完美通俗讲解系列之 (一)
  3. IPHONE手机知识大全(中)
  4. 读书笔记:杨绛《我们仨》
  5. IT项目管理那些事儿读书笔记
  6. 计算机网络技术课程答案网课,《计算机网络技术》大学生网课答案.docx
  7. 晨控CK-GW06-E03与TwinCAT软件配置指南
  8. Java输入三条边判断是否能组成三角形,若能构成则输出什么三角形
  9. Format_String_Attack_Lab
  10. 妥善处理的九大面试送命题