「java金额format」java金额保留两位小数点

博主:adminadmin 2022-11-26 01:54:07 214

本篇文章给大家谈谈java金额format,以及java金额保留两位小数点对应的知识点,希望对各位有所帮助,不要忘了收藏本站喔。

本文目录一览:

JAVA中怎样使用format进行对常规类型格式化的方法

你要格式化什么?日期?数字?下面给你举两个例子吧。日期的格式化可以使用java.text.SimpleDateFormat 类,例如:java.text.SimpleDateFormat sdf = new java.text.SimpleDateFormat("现在是:yyyy年MM月dd日 hh时mm分");String now=sdf.format(new java.util.Date();System.out.println(now);同样,我们也可以把它反过来,即把字符串格式化为java.util.Date对象:java.util.Date dd = sdf.parseDate("现在是:2010年02月02日 08时56分");

下面是把数字形式的金额格式化为货币的形式:java.text.DecimalFormat df=new java.text.DecimalFormat(",##0.00");System.out.println("总金额为:" + df.format(123456.7890d));

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金额转换的问题,想要保留小数点后两位,这样会下标越界该怎么改?

哈?你的程序好复杂,我都没看明白

BigDecimal直接设置小数并设置四舍五入的方式不就好了吗?

public static void main(String[] args) {

BigDecimal b0 = new BigDecimal("123");

BigDecimal b1 = new BigDecimal("1234");

BigDecimal b2 = new BigDecimal("12345");

BigDecimal b3 = new BigDecimal("123456");

BigDecimal b4 = new BigDecimal("1234567");

BigDecimal b5 = new BigDecimal("12345678");

BigDecimal b6 = new BigDecimal("123.45678");

BigDecimal b7 = new BigDecimal("123.45678");

System.out.println(b0.divide(new BigDecimal(100), 2, RoundingMode.HALF_UP));

System.out.println(b1.divide(new BigDecimal(100), 2, RoundingMode.HALF_UP));

System.out.println(b2.divide(new BigDecimal(1000), 2, RoundingMode.HALF_UP));

System.out.println(b3.divide(new BigDecimal(10000), 2, RoundingMode.DOWN));

System.out.println(b4.divide(new BigDecimal(10000), 3, RoundingMode.HALF_UP));

System.out.println(b5.divide(new BigDecimal(100000), 3, RoundingMode.DOWN));

System.out.println(b6.setScale(2, RoundingMode.HALF_UP));

System.out.println(b7.setScale(2, RoundingMode.DOWN));

}

其中,setScale即设置小数位数是多少,RoundingMode表示四舍五入的方式,常用的就是HALF_UP表示四舍五入,DOWN表示直接舍掉,还有些其他的你查一下RoundingMode就行。

运行结果:

java.text.DecimalFormat如何将数字格式化为金额格式,而且小数点保留任意位

DecimalFormat myformat = new DecimalFormat();

myformat.applyPattern("##,###.000");

System.out.println(myformat.format(11112345.12345));

java如何把大写的金额改成小写

/**

* @(#)SimpleMoneyFormat.java

*

*金额转换,阿拉伯数字的金额转换为中国传统的形式输出

* @lpxuan

* @version 1.00 2010/7/31

*/

import java.text.NumberFormat;

import java.util.HashMap;

import java.lang.StringBuffer;

public class SimpleMoneyFormat {

public static final String EMPTY="";

public static final String ZERO="零";

public static final String ONE="壹";

public static final String TWO="贰";

public static final String THREE="叁";

public static final String FOUR="肆";

public static final String FIVE="伍";

public static final String SIX="陆";

public static final String SEVEN="柒";

public static final String EIGHT="捌";

public static final String NINE="玖";

public static final String TEN="拾";

public static final String HUNDRED="佰";

public static final String THOUSAND="仟";

public static final String TEN_THOUSAND="万";

public static final String HUNDRED_MILLION="亿";

public static final String YUAN="元";

public static final String JIAO="角";

public static final String FEN="分";

public static final String DOT=".";

private static SimpleMoneyFormat formatter=null;

private HashMap chineseNumberMap=new HashMap();

private HashMap chineseMoenyPattern=new HashMap();

private NumberFormat numberFormat=NumberFormat.getInstance();

//私有构造函数

private SimpleMoneyFormat() {

numberFormat.setMaximumFractionDigits(4);

numberFormat.setMinimumFractionDigits(2);

numberFormat.setGroupingUsed(false);

chineseNumberMap.put("0",ZERO);

chineseNumberMap.put("1",ONE);

chineseNumberMap.put("2",TWO);

chineseNumberMap.put("3",THREE);

chineseNumberMap.put("4",FOUR);

chineseNumberMap.put("5",FIVE);

chineseNumberMap.put("6",SIX);

chineseNumberMap.put("7",SEVEN);

chineseNumberMap.put("8",EIGHT);

chineseNumberMap.put("9",NINE);

chineseNumberMap.put(DOT,DOT);

chineseMoenyPattern.put("1",TEN);

chineseMoenyPattern.put("2",HUNDRED);

chineseMoenyPattern.put("3",THOUSAND);

chineseMoenyPattern.put("4",TEN_THOUSAND);

chineseMoenyPattern.put("5",TEN);

chineseMoenyPattern.put("6",HUNDRED);

chineseMoenyPattern.put("7",THOUSAND);

chineseMoenyPattern.put("8",HUNDRED_MILLION);

}

//单例模式

public static SimpleMoneyFormat getInstance(){

if(formatter==null)

formatter=new SimpleMoneyFormat();

return formatter;

}

public String format(String moneyStr){

checkPrecision(moneyStr);

String result;

result=convertToChineseNumber(moneyStr);

result=addUnitsToChineseMoenyString(result);

return result;

}

public String format(double moneyDouble){

return format(numberFormat.format(moneyDouble));

}

public String format(int moneyInt){

return format(numberFormat.format(moneyInt));

}

public String format(long moneyLong){

return format(numberFormat.format(moneyLong));

}

public String format(Number moneyNum){

return format(numberFormat.format(moneyNum));

}

private String convertToChineseNumber(String moneyStr){

String result;

StringBuffer cMoneyStringBuffer =new StringBuffer();

for(int i=0;imoneyStr.length();i++){

cMoneyStringBuffer.append(chineseNumberMap.

get(moneyStr.substring(i,i+1)));

}

int indexOfDot=cMoneyStringBuffer.indexOf(DOT);

int moneyPatternCursor=1;

for(int i=indexOfDot-1;i0;i--){

cMoneyStringBuffer.insert(i,

chineseMoenyPattern.get(EMPTY+moneyPatternCursor));

moneyPatternCursor=moneyPatternCursor==

8?1:moneyPatternCursor+1;

}

String fractionPart=cMoneyStringBuffer.substring(

cMoneyStringBuffer.indexOf("."));

cMoneyStringBuffer.delete(

cMoneyStringBuffer.indexOf("."),

cMoneyStringBuffer.length());

while(cMoneyStringBuffer.indexOf("零拾")!=-1){

cMoneyStringBuffer.replace(

cMoneyStringBuffer.indexOf("零拾"),

cMoneyStringBuffer.indexOf("零拾")+2,ZERO);

}

while(cMoneyStringBuffer.indexOf("零佰")!=-1){

cMoneyStringBuffer.replace(

cMoneyStringBuffer.indexOf("零佰"),

cMoneyStringBuffer.indexOf("零佰")+2,ZERO);

}

while(cMoneyStringBuffer.indexOf("零仟")!=-1){

cMoneyStringBuffer.replace(

cMoneyStringBuffer.indexOf("零仟"),

cMoneyStringBuffer.indexOf("零仟")+2,ZERO);

}

while(cMoneyStringBuffer.indexOf("零万")!=-1){

cMoneyStringBuffer.replace(

cMoneyStringBuffer.indexOf("零万"),

cMoneyStringBuffer.indexOf("零万")+2,TEN_THOUSAND);

}

while(cMoneyStringBuffer.indexOf("零亿")!=-1){

cMoneyStringBuffer.replace(

cMoneyStringBuffer.indexOf("零亿"),

cMoneyStringBuffer.indexOf("零亿")+2,HUNDRED_MILLION);

}

while(cMoneyStringBuffer.indexOf("零零")!=-1){

cMoneyStringBuffer.replace(

cMoneyStringBuffer.indexOf("零零"),

cMoneyStringBuffer.indexOf("零零")+2,ZERO);

}

if(cMoneyStringBuffer.lastIndexOf(ZERO)

==cMoneyStringBuffer.length()-1){

cMoneyStringBuffer.delete(

cMoneyStringBuffer.length()-1,

cMoneyStringBuffer.length());

}

cMoneyStringBuffer.append(fractionPart);

result=cMoneyStringBuffer.toString();

return result;

}

private String addUnitsToChineseMoenyString(String moneyStr){

String result;

StringBuffer cMoneyStringBuffer=new StringBuffer(moneyStr);

int indexOfDot=cMoneyStringBuffer.indexOf(DOT);

cMoneyStringBuffer.replace(indexOfDot,indexOfDot+1,YUAN);

cMoneyStringBuffer.insert(cMoneyStringBuffer.length()-1,JIAO);

cMoneyStringBuffer.insert(cMoneyStringBuffer.length(),FEN);

//拾佰仟万亿等都是汉字里面才有的单位,加上它们

if(cMoneyStringBuffer.indexOf("零角零分")!=-1)//去掉零头,加整

cMoneyStringBuffer.replace(cMoneyStringBuffer.indexOf("零角零分"),

cMoneyStringBuffer.length(),"整");

else if(cMoneyStringBuffer.indexOf("零分")!=-1)//去掉零分,加整

cMoneyStringBuffer.replace(cMoneyStringBuffer.indexOf("零分"),

cMoneyStringBuffer.length(),"整");

else if(cMoneyStringBuffer.indexOf("零角")!=-1)

cMoneyStringBuffer.delete(cMoneyStringBuffer.indexOf("零角"),

cMoneyStringBuffer.indexOf("零角")+2);

result=cMoneyStringBuffer.toString();

return result;

}

//检查精度的合法性

private void checkPrecision(String moneyStr){

int fractionDigits=moneyStr.length()-moneyStr.indexOf(DOT)-1;

if(fractionDigits2)//精度不能比分低

throw new RuntimeException("金额"+moneyStr+"的小数位数多余两位.");

}

public static void main(String[] args){

System.out.println(getInstance().format(new Double(10010001.01)));

}

}

java金额format的介绍就聊到这里吧,感谢你花时间阅读本站内容,更多关于java金额保留两位小数点、java金额format的信息别忘了在本站进行查找喔。

The End

发布于:2022-11-26,除非注明,否则均为首码项目网原创文章,转载请注明出处。