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 ...
随机推荐
- 【k8s连载系列】k8s介绍
k8s是Kubernetes的缩写,Google 于 2014 年开源了 Kubernetes 项目. 一.k8s的历史演变 k8s的演变过程:首先从传统的服务-->虚拟机部署-->容器部 ...
- 5.django-模型ORM
Django中内嵌了ORM框架,不需要直接编写SQL语句进行数据库的操作,通过定义模型类来完成对数据库中表的操作 O:Object,也就是类对象的意思 R:Relation,关系数据库中表的意思 M: ...
- 第二十五节:scrapy爬虫识别验证码(四)手绘验证码识别
一.介绍 今天主要介绍的是微博客户端在登录时出现的四宫格手绘验证码,不多说直接看看验证码长成什么样. 二.思路 1.由于微博上的手绘验证码只有四个宫格,且每个宫格之间都有有向线段连接,所 ...
- [.NET学习] EFCore学习之旅 -1
1.创建项目 这里我们先新建一个控制台项目:"jyq.EFCore.Learn",框架基于.NET6 2.安装 Neget包 Install-Package Microsoft.E ...
- java面试题-常用框架
Spring Spring 是什么 一个开发框架,一个容器,主要由面向切面AOP 和依赖注入DI两个方面,外加一些工具 AOP和IOC AOP 面向切面 AOP是一种编程思想,主要是逻辑分离, 使业务 ...
- 【小项目】微信定时推送天气预报Github项目使用及原理介绍-包含cron、天气预报、常用api
一.资料链接 1.github地址 https://github.com/qq1534774766/wx-push 2.教程地址 https://blog.csdn.net/qq15347747/ar ...
- 【kafka】JDBC source&sink connect实现数据从Oracle实时同步插入更新到PostgreSQL(PG)
〇.所需资料 1.JDBC connect的plugins下载地址(confluent) 一.Oracle建表 1.表规划 表名:Test_TimeFormat_Order.Test_Stress_O ...
- 【论文解读】NIPS 2021-HSWA: Hierarchical Semantic-Visual Adaption for Zero-Shot Learning.(基于层次适应的零样本学习)
作者:陈使明 华中科技大学
- DeprecationWarning: collection.ensureIndex is deprecated. Use createIndexes instead
// 引入mongoose模块 const mongoose = require('mongoose'); // 链接数据库 mongoose.set('useCreateIndex', true) ...
- AIBOX视频边缘计算终端,助力识别人员违规行为!
目前,制造业工厂工作区布局分散,生产安全质量控制难度较大.人员擅自离岗.玩手机.区域入侵.吸烟.未穿反光衣.异物占位等违法行为不能及时控制,安全风险十分巨大.如果手动检查或通过人眼检查监控录像,不仅产 ...