java中金额用什么类型 decimal相当于java什么类型
大家好,感谢邀请,今天来为大家分享一下java中金额用什么类型的问题,以及和decimal相当于java什么类型的一些困惑,大家要是还不太明白的话,也没有关系,因为接下来将为大家分享,希望可以帮助到大家,解决大家的问题,下面就开始吧!
在java中,对一些敏感数据,用什么类型来存储更安全,为什么
系统里的数据类型是根据你的业务以及线程安全性能来选择的,比如金额适合使用bigdecimal类型,方便对金额的管理。对某个字段经常进行修改的使用StringBuffer类型,可以提升线程安全的等级,也可以减少服务器的负担。
关于数据的安全性,泛指系统之间的数据交互,比如我系统A向系统B发送客户的信息需要获取用户的详细资料,这时两边都需要对发送的数据进行加密,比如RSA SM加密等,也可以使用加密的传输协议HTTPS,这样数据不会被第三方查看,从而保持了数据安全性。
decimal相当于java什么类型
DecimalFormat是 NumberFormat的一个具体子类,用于格式化十进制数字。该类设计有各种功能,使其能够分析和格式化任意语言环境中的数,包括对西方语言、阿拉伯语和印度语数字的支持。它还支持不同类型的数,包括整数(123)、定点数(123.4)、科学记数法表示的数(1.23E4)、百分数(12%)和金额($123)。所有这些内容都可以本地化。
举个例子你定义了一个 int number= 123;
DecimalFormat abc=new DecimalFormat("0.00");
abc.format(number)的值就变成了123.00;了
格式化数字用的
java实现金额转换,阿拉伯数字的金额转换成中国传统的形式
直接通过以下接口类方法实现即可:
import java.math.BigDecimal;
/**
*金额工具类
*
*@author zn
*
*@Date 2013-2-1
*@Email zn.share@gmail.com
*/
public class MoneyUtil{
private static final int DFT_SCALE= 2;
/**大写数字*/
private static final String[] NUMBERS={"零","壹","贰","叁","肆","伍",
"陆","柒","捌","玖"};
/**整数部分的单位*/
private static final String[] IUNIT={"元","拾","佰","仟","万","拾","佰",
"仟","亿","拾","佰","仟","万","拾","佰","仟"};
/**小数部分的单位*/
private static final String[] DUNIT={"角","分","厘"};
/**
*得到大写金额。
*/
public static String toChinese(String str){
str= str.replaceAll(",","");//去掉","
String integerStr;//整数部分数字
String decimalStr;//小数部分数字
//初始化:分离整数部分和小数部分
if(str.indexOf(".")> 0){
integerStr= str.substring(0, str.indexOf("."));
decimalStr= str.substring(str.indexOf(".")+ 1);
} else if(str.indexOf(".")== 0){
integerStr="";
decimalStr= str.substring(1);
} else{
integerStr= str;
decimalStr="";
}
// integerStr去掉首0,不必去掉decimalStr的尾0(超出部分舍去)
if(!integerStr.equals("")){
integerStr= Long.toString(Long.parseLong(integerStr));
if(integerStr.equals("0")){
integerStr="";
}
}
// overflow超出处理能力,直接返回
if(integerStr.length()> IUNIT.length){
System.out.println(str+":超出处理能力");
return str;
}
int[] integers= toArray(integerStr);//整数部分数字
boolean isMust5= isMust5(integerStr);//设置万单位
int[] decimals= toArray(decimalStr);//小数部分数字
return getChineseInteger(integers, isMust5)
+ getChineseDecimal(decimals);
}
/**
*整数部分和小数部分转换为数组,从高位至低位
*/
private static int[] toArray(String number){
int[] array= new int[number.length()];
for(int i= 0; i< number.length(); i++){
array[i]= Integer.parseInt(number.substring(i, i+ 1));
}
return array;
}
/**
*得到中文金额的整数部分。
*/
private static String getChineseInteger(int[] integers, boolean isMust5){
StringBuffer chineseInteger= new StringBuffer("");
int length= integers.length;
for(int i= 0; i< length; i++){
// 0出现在关键位置:1234(万)5678(亿)9012(万)3456(元)
//特殊情况:10(拾元、壹拾元、壹拾万元、拾万元)
String key="";
if(integers[i]== 0){
if((length- i)== 13)//万(亿)(必填)
key= IUNIT[4];
else if((length- i)== 9)//亿(必填)
key= IUNIT[8];
else if((length- i)== 5&& isMust5)//万(不必填)
key= IUNIT[4];
else if((length- i)== 1)//元(必填)
key= IUNIT[0];
// 0遇非0时补零,不包含最后一位
if((length- i)> 1&& integers[i+ 1]!= 0)
key+= NUMBERS[0];
}
chineseInteger.append(integers[i]== 0? key
:(NUMBERS[integers[i]]+ IUNIT[length- i- 1]));
}
return chineseInteger.toString();
}
/**
*得到中文金额的小数部分。
*/
private static String getChineseDecimal(int[] decimals){
StringBuffer chineseDecimal= new StringBuffer("");
for(int i= 0; i< decimals.length; i++){
//舍去3位小数之后的
if(i== 3)
break;
chineseDecimal.append(decimals[i]== 0?""
:(NUMBERS[decimals[i]]+ DUNIT[i]));
}
return chineseDecimal.toString();
}
/**
*判断第5位数字的单位"万"是否应加。
*/
private static boolean isMust5(String integerStr){
int length= integerStr.length();
if(length> 4){
String subInteger="";
if(length> 8){// TODO 12-9-17
//取得从低位数,第5到第8位的字串
subInteger= integerStr.substring(length- 8, length- 4);
} else{
subInteger= integerStr.substring(0, length- 4);
}
return Integer.parseInt(subInteger)> 0;
} else{
return false;
}
}
/**
* BigDecimal相乘,四舍五入保留0位
*
*@param a
*@param b
*@return a*b
*/
public static BigDecimal mutiply(String a, String b, int roundingMode){
BigDecimal bd= new BigDecimal(a);
return bd.multiply(new BigDecimal(b)).setScale(DFT_SCALE, roundingMode);
}
/**
* BigDecimal相除,四舍五入保留两位
*
*@param a
*@param b
*@return a/b
*/
public static BigDecimal div(String a, String b, int roundingMode){
BigDecimal decimal1= new BigDecimal(a);
BigDecimal decimal2= new BigDecimal(b);
return decimal1.divide(decimal2, DFT_SCALE, roundingMode);
}
/**
* BigDecimal相加,四舍五入保留两位
*
*@param a
*@param b
*@return a+b
*/
public static BigDecimal sum(String a, String b, int roundingMode){
BigDecimal decimal1= new BigDecimal(a);
BigDecimal decimal2= new BigDecimal(b);
// DecimalFormat format= new DecimalFormat("#0.00");
return decimal1.add(decimal2).setScale(DFT_SCALE, roundingMode);
}
/**
* BigDecimal相减,四舍五入保留两位
*
*@param a
*@param b
*@return a+b
*/
public static BigDecimal sub(String a, String b, int roundingMode){
BigDecimal decimal1= new BigDecimal(a);
BigDecimal decimal2= new BigDecimal(b);
// DecimalFormat format= new DecimalFormat("#0.00");
return decimal1.subtract(decimal2).setScale(DFT_SCALE, roundingMode);
}
/**
* 100.00为10000
*
*@param a
*@return
*/
public static BigDecimal format(String a, int roundingMode){
return new BigDecimal(a).multiply(new BigDecimal(100)).setScale(0,
roundingMode);
}
public static void main(String[] args){
String number="54452";
System.out.println(number+""+ MoneyUtil.toChinese(number));
number="30200";
System.out.println(number+""+ MoneyUtil.toChinese(number));
number="30000.05";
System.out.println(number+""+ MoneyUtil.toChinese(number));
number="30000.00";
System.out.println(number+""+ MoneyUtil.toChinese(number));
}
}
备注:最后面的main方法是具体的调用。
好了,文章到这里就结束啦,如果本次分享的java中金额用什么类型和decimal相当于java什么类型问题对您有所帮助,还望关注下本站哦!