java 金额计算
package com.example.test; import android.util.Log; import java.math.BigDecimal;
import java.text.DecimalFormat; /**
* 金额工具类,主要是金额的格式化,金额的加、减
* @author Tiny
*
*/
public class MoneyUtil { public static DecimalFormat fnum = new DecimalFormat("##0.00000000000000000000"); /**
* 格式化金额
* @param value
* @return
*/
public static String formatMoney(String value){
if(value == null || value == "" ){
value = "0.00";
}
return fnum.format(new BigDecimal(value));
} /**
* 金额相加
* @param valueStr 基础值
* @param minusValueStr 被加数
* @return
*/
public static String moneyAdd(String valueStr,String addStr){
BigDecimal value = new BigDecimal(valueStr);
BigDecimal augend = new BigDecimal(addStr);
return fnum.format(value.add(augend));
} /**
* 金额相加
* @param valueStr 基础值
* @param minusValueStr 被加数
* @return
*/
public static BigDecimal moneyAdd(BigDecimal value,BigDecimal augend){
return value.add(augend);
} /**
* 金额相减
* @param valueStr 基础值
* @param minusValueStr 减数
* @return
*/
public static String moneySub(String valueStr,String minusStr){
BigDecimal value= new BigDecimal(valueStr);
BigDecimal subtrahend = new BigDecimal(minusStr);
return fnum.format(value.subtract(subtrahend));
} /**
* 金额相减
* @param value 基础值
* @param subtrahend 减数
* @return
*/
public static BigDecimal moneySub(BigDecimal value,BigDecimal subtrahend){
return value.subtract(subtrahend);
} /**
* 金额相乘
* @param valueStr 基础值
* @param minusValueStr 被乘数
* @return
*/
public static String moneyMul(String valueStr,String mulStr){
BigDecimal value = new BigDecimal(valueStr);
BigDecimal mulValue = new BigDecimal(mulStr);
return fnum.format(value.multiply(mulValue));
} /**
* 金额相乘
* @param value 基础值
* @param mulValue 被乘数
* @return
*/
public static BigDecimal moneyMul(BigDecimal value,BigDecimal mulValue){
return value.multiply(mulValue);
} /**
* 金额相除 <br/>
* 精确小位小数
* @param valueStr 基础值
* @param minusValueStr 被乘数
* @return
*/
public static String moneydiv(String valueStr,String divideStr){
BigDecimal value = new BigDecimal(valueStr);
BigDecimal divideValue = new BigDecimal(divideStr);
return fnum.format(value.divide(divideValue, 2, BigDecimal.ROUND_HALF_UP));
} /**
* 金额相除 <br/>
* 精确小位小数
* @param value 基础值
* @param divideValue 被乘数
* @return
*/
public static BigDecimal moneydiv(BigDecimal value,BigDecimal divideValue){
return value.divide(divideValue, 2, BigDecimal.ROUND_HALF_UP);
} /**
* 值比较大小
* <br/>如果valueStr大于等于compValueStr,则返回true,否则返回false
* true 代表可用余额不足
* @param valueStr (需要消费金额)
* @param compValueStr (可使用金额)
* @return
*/
public static boolean moneyComp(String valueStr,String compValueStr){
BigDecimal value = new BigDecimal(valueStr);
BigDecimal compValue = new BigDecimal(compValueStr);
//0:等于 >0:大于 <0:小于
int result = value.compareTo(compValue);
if(result >= 0){
return true;
}else{
return false;
}
} /**
* 值比较大小
* <br/>如果valueStr大于等于compValueStr,则返回true,否则返回false
* true 代表可用余额不足
* @param valueStr (需要消费金额)
* @param compValueStr (可使用金额)
* @return
*/
public static boolean moneyComp(BigDecimal valueStr,BigDecimal compValueStr){
//0:等于 >0:大于 <0:小于
int result = valueStr.compareTo(compValueStr);
if(result >= 0){
return true;
}else{
return false;
}
} /**
* 金额乘以,省去小数点
* @param valueStr 基础值
* @return
*/
public static String moneyMulOfNotPoint (String valueStr, String divideStr){
BigDecimal value = new BigDecimal(valueStr);
BigDecimal mulValue = new BigDecimal(divideStr);
valueStr = fnum.format(value.multiply(mulValue));
return fnum.format(value.multiply(mulValue)).substring(0, valueStr.length()-3);
} /**
* 给金额加逗号切割
* @param str
* @return
*/
public static String addComma(String str) {
try {
String banNum = "";
if (str.contains(".")) {
String[] arr = str.split("\\.");
if (arr.length == 2) {
str = arr[0];
banNum = "." + arr[1];
}
}
// 将传进数字反转
String reverseStr = new StringBuilder(str).reverse().toString();
String strTemp = "";
for (int i = 0; i < reverseStr.length(); i++) {
if (i * 3 + 3 > reverseStr.length()) {
strTemp += reverseStr.substring(i * 3, reverseStr.length());
break;
}
strTemp += reverseStr.substring(i * 3, i * 3 + 3) + ",";
}
// 将[789,456,] 中最后一个[,]去除
if (strTemp.endsWith(",")) {
strTemp = strTemp.substring(0, strTemp.length() - 1);
}
// 将数字重新反转
String resultStr = new StringBuilder(strTemp).reverse().toString();
resultStr += banNum;
return resultStr;
}catch(Exception e){
return str;
} } }
java 金额计算的更多相关文章
- java 金额计算,商业计算 double不精确问题 BigDecimal,Double保留两位小数方法
解决办法================== http://blog.javaxxz.com/?p=763 一提到Java里面的商业计算,我们都知道不能用float和double,因为他们无法 进行精 ...
- JAVA中高精度金额计算
一般java代码中遇到高精度金额计算,日常使用bigDecimal类型. 在使用BigDecimal类来进行计算的时候,主要分为以下步骤: 1.用float或者double变量构建BigDecimal ...
- js中进行金额计算parseFloat
在js中进行以元为单位进行金额计算时 使用parseFloat会产生精度问题var price = 10.99;var quantity = 7;var needPay = parseFloat(pr ...
- Java精确计算小数
Java在计算浮点数的时候,由于二进制无法精确表示0.1的值(就好比十进制无法精确表示1/3一样),所以一般会对小数格式化处理. 但是如果涉及到金钱的项目,一点点误差都不能有,必须使用精确运算的时候, ...
- Java精确计算
Java精确计算 如果我们编译运行下面这个程序会看到什么? public class Test{ public static void main(String args[]){ System.out. ...
- java对数计算
Java对数函数的计算方法非常有问题,然而在API中却有惊人的误差.但是假如运用了以下的方法,用Java处理数字所碰到的小麻烦就可以轻而易举的解决了. Sun的J2SE提供了一个单一的Java对数方法 ...
- java精确计算、精确计算工具类
java精确计算 package org.aisino.erp.webservice.dzfp.util; import java.math.BigDecimal; public class Math ...
- Spark Java API 计算 Levenshtein 距离
Spark Java API 计算 Levenshtein 距离 在上一篇文章中,完成了Spark开发环境的搭建,最终的目标是对用户昵称信息做聚类分析,找出违规的昵称.聚类分析需要一个距离,用来衡量两 ...
- js中进行金额计算
js中进行金额计算parseFloat 在js中进行以元为单位进行金额计算时 使用parseFloat会产生精度问题var price = 10.99;var quantity = 7;var n ...
- js中进行金额计算 parseFloat 会产生精度问题
在js中进行以元为单位进行金额计算时 使用parseFloat会产生精度问题 var price = 10.99;var quantity = 7;var needPay = parseFloat(p ...
随机推荐
- 又拍云之 Keepalived 高可用部署
在聊 Keepalived 之前,我们需要先简单了解一下 VRRP.VRRP(Virtual Router Redundancy Protocol)即虚拟路由冗余协议,是专门为了解决静态路由的高可用而 ...
- 第2-3-4章 上传附件的接口开发-文件存储服务系统-nginx/fastDFS/minio/阿里云oss/七牛云oss
目录 5.3 接口开发-上传附件 5.3.1 接口文档 5.3.2 代码实现 5.3.3 接口测试 5.3 接口开发-上传附件 第2-1-2章 传统方式安装FastDFS-附FastDFS常用命令 第 ...
- php自定义分页类
<?php class Paging { private $totalStrip; //总条数 private $pageStrip; //每页条数 private $totalPages; / ...
- Kubernetes—资源管理
3. 资源管理 3.1 资源管理介绍 在kubernetes中,所有的内容都抽象为资源,用户需要通过操作资源来管理kubernetes. kubernetes的本质上就是一个集群系统,用户可以在集群中 ...
- linux系统移植
1 linux环境搭建 1.1 添加交叉开发工具链 新建如下工程目录: gcc-4.6.4.tar.xz #拷贝 tar -Jxvf gcc-4.6.4.tar.xz #解压 cd ./gcc-4.6 ...
- Datawhale组队学习_Task04:详读西瓜书+南瓜书第5章
第5章 神经网络 5.1 神经元模型 基本定义:神经网络是由具有适应性的简单单元组成的广泛并行互联的网络,它的组织能够模拟生物神经系统对真实世界物体所做出的交互反应. M-P神经元模型: 在此模型 ...
- 【Kafka】Quota配额命令、文档相关概念
一.多租赁模式基于 Zookeeper和 kafka-configs.sh 管理所有用户 1.步骤 l 基于zookeeper,实现用户管理 l 配置broker认证信息,并进行平滑更新 l 配置cl ...
- 【Java EE】Day08 HTML&CSS
一.表单 1.概述 采集数据,与服务器交互包括 form表单,需要提交则必须设置name属性,action方式主要包 get:参数会在地址栏显示(请求行),长度有限 post:参数被封装在请求体,参数 ...
- 【每日一题】【链表&头插法&ASCII码】【链表&迭代器】2022年1月28日-NC1 大数加法
描述以字符串的形式读入两个数字,编写一个函数计算它们的和,以字符串形式返回. 思路:原生链表&头插法节点值 import java.util.*; public class Solution ...
- Kubernetes(k8s)存储管理之数据卷volumes(一):volumes的引入和emptyDir数据卷
目录 一.系统环境 二.前言 三.Docker数据卷volumes 四.Kubernetes 数据卷volumes 4.1 有状态容器和无状态容器 4.2 Kubernetes 数据卷volumes解 ...