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 ...
随机推荐
- Day3:学习Java的第一步:Hello World!
HelloWorld 新建一个文件夹存放代码 新建一个JAVA文件 文件后缀名为.java Hello.java 打开文件扩展名,即可查看到文件类型 运行文件:右键Hello.java文件用notep ...
- Oracle:ORA-00911: invalid character解决办法
问题记录:用jmeter执行sql语句,报错:ORA-00911: invalid character. 解决方法:sql语句末尾";"导致,去掉即可解决. 过程记录: 使用jme ...
- h5 websocket 断开重新连接
最近的项目中使用ws 长连接来接收和发送消息, 直接上代码 import * as SockJS from "sockjs-client"; import Stomp from & ...
- Python中Print方法
1 number1 = int(input("请输入第一个数:")) 2 number2 = int(input("请输入第二个数:")) 3 4 # 方法一: ...
- 实战中的sudo提权漏洞的使用姿势(CVE-2021-3156)
实战中的sudo提权漏洞的使用姿势 免责声明: 0x00 漏洞概述 0x01 漏洞原理 0x02 受影响版本 0x03 不受影响版本 0x04 漏洞复现(centos) 复现POC1: 复现POC2: ...
- 12 张图看懂 CPU 缓存一致性与 MESI 协议,真的一致吗?
本文已收录到 GitHub · AndroidFamily,有 Android 进阶知识体系,欢迎 Star.技术和职场问题,请关注公众号 [彭旭锐] 进 Android 面试交流群. 前言 大家好 ...
- Nginx如何配置隐藏index.php文件
server { listen 80; #listen [::]:80 default_server ipv6only=on; server_name jiqing.dexin.com; index ...
- windows10 ftp文件夹错误
遇到问题: 解决办法: 1. cmd直接访问 ftp ip 2. 启用tftp client 从文件夹访问 注直接访问会弹出如之前报错一样的失败:ftp://ip ftp://用户:密码@ip 使用如 ...
- (C++) C++虚函数性能分析
class baseA { public: virtual float mulTwo(float a, float b) = 0; virtual ~baseA() = default; }; cla ...
- vue3 第二天vue响应式原理以及ref和reactive区别
前言: 前天我们学了 ref 和 reactive ,提到了响应式数据和 Proxy ,那我们今天就来了解一下,vue3 的响应式 在了解之前,先复习一下之前 vue2 的响应式原理 vue2 的响应 ...