评论

收藏

[Java] java中金额元转万元工具类的实例

编程语言 编程语言 发布于:2021-08-16 18:33 | 阅读数:377 | 评论:0

我就废话不多说了,大家还是直接看代码吧~
public static void main(String[] args) {
  // 具体的金额(单位元)
  String value = "88000067898";
  BigDecimal bigDecimal = new BigDecimal(value);
  // 转换为万元(除以10000)
  BigDecimal decimal = bigDecimal.divide(new BigDecimal("10000"));
  // 保留两位小数
  DecimalFormat formater = new DecimalFormat("0");
  // 四舍五入
  formater.setRoundingMode(RoundingMode.HALF_UP); 
  // 格式化完成之后得出结果
  String formatNum = formater.format(decimal);
  System.out.println(formatNum);
 }
 /**元转万元且四舍五入取整*/
 public static String getNumberWan(String value) {
  BigDecimal bigDecimal = new BigDecimal(value);
  // 转换为万元(除以10000)
  BigDecimal decimal = bigDecimal.divide(new BigDecimal("10000"));
  // 保留两位小数
  DecimalFormat formater = new DecimalFormat("0");
  // 四舍五入
  formater.setRoundingMode(RoundingMode.HALF_UP); 
  // 格式化完成之后得出结果
  String rs = formater.format(decimal);
  return rs;
 }
 
 /**元转万元且保留两位小数并四舍五入*/
 public static String getNumberWanTwo(String value) {
  BigDecimal bigDecimal = new BigDecimal(value);
  // 转换为万元(除以10000)
  BigDecimal decimal = bigDecimal.divide(new BigDecimal("10000"));
  // 保留两位小数
  DecimalFormat formater = new DecimalFormat("0");
  // 四舍五入
  formater.setRoundingMode(RoundingMode.HALF_UP); 
  // 格式化完成之后得出结果
  String rs = formater.format(decimal);
  return rs;
 }
补充:用java实现将金额由数字转为中文的数字金额
写一个金额由数字转为中文的数字金额
例如:
123123.12转为壹拾贰万叁仟壹佰贰拾叁元壹角贰分
由于是从开发过程中代码直接copy过来的,有一部分可以忽略,新人刚刚工作,写的不好,请多指正
import java.util.Scanner;
public class Test {
  //数字单位
  private static final String[] NUMBERS_UNITS= {"拾","佰","仟","万"};
  public static void main(String[] args) {
  Test st=new Test();
  Scanner scanner=new Scanner(System.in);
  System.out.println("请输入金额:");
  //获取前端传递过来的金额数字
  String money=scanner.nextLine();
  //1.判断是否为null
  st.isNull(money);
  //2.判断是否有非法字符
  st.isIllegal(money);
  //3.判断是否超过限额
  String[] array=st.isBeyondMax(money);
  //4.整数位字符转换
  StringBuffer chineseInt=st.convertInt(array[0]);
  //5.判断有无小数位
  if(array.length==2) {
    //6.有则进行小数位字符转换
    StringBuffer chineseDec=st.convertDec(array[1]);
    //7.拼接整数和小数位
    chineseInt=chineseInt.append(chineseDec);
  }
  //8.将转为大写的金额设置回总线
  System.out.println(chineseInt);
  }
  /**
   * 将小数位的金额数字转化为中文大写
   * @param string 金额数字
   * @return 转为中文的金额数字
   */
  private StringBuffer convertDec(String string) {
  StringBuffer str=convert(string);
  switch(str.length()) {
    case 1:
    str.append("角");
    break;
    case 2:
    str.append("分");
    str.insert(1, "角");
    break;
  }
  return str;
  }
  /**
   * 将整数位的金额数字对应转化为中文大写
   * @param string 金额数字
   * @return 转为中文的金额数字
   */
  private StringBuffer convertInt(String string) {
  StringBuffer str=convert(string);
  int length=str.length()-1;
  for (int i = 0,j=str.length()-1; i < length; i++,j--) {
    int v=i%4;
    System.out.println("i:"+i+" j:"+j+" v:"+v+" "+str.toString());
    str.insert(j, NUMBERS_UNITS[v]);
  }
  str.append("元");
  return str;
  }
  /**
   * 循环整个字符串,替换字符
   * @param string 要替换的字符串
   * @return 替换好的字符
   */
  private StringBuffer convert(String string) {
  StringBuffer str=new StringBuffer(string);
  for (int i = 0; i < str.length(); i++) {
    str.replace(i, i+1,replaceCharacter(str.substring(i, i+1)));
  }
  return str;
  }
  /**
   * 将给定的数字字符替换为对应的中文数字字符
   * @param string 数字字符
   * @return 中文数字字符
   */
  private String replaceCharacter(String string) {
  switch(string) {
    case "0":
    string="零";
    break;
    case "1":
    string="壹";
    break;
    case "2":
    string="贰";
    break;
    case "3":
    string="叁";
    break;
    case "4":
    string="肆";
    break;
    case "5":
    string="伍";
    break;
    case "6":
    string="陆";
    break;
    case "7":
    string="柒";
    break;
    case "8":
    string="捌";
    break;
    case "9":
    string="玖";
    break;
  }
  return string;
  }
  /**
   * 检测传入金额字符是否为空
   * @param money 金额字符
   */
  private void isNull(String money) {
  if(money == null) {
    //抛出异常
  }
  }
  /**
   * 检测传入金额字符是否符合条件
   * @param money 金额字符
   */
  private void isIllegal(String money) {
  if(!money.matches("\\d+.?\\d*")) {
    //抛出异常
  }
  }
  /**
   * 检测传入金额字符是否超出最大值
   * @param money 金额字符
   * @return 返回拆分的金额数字
   */
  private String[] isBeyondMax(String money) {
  String[] array=money.split("\\.");
  //整数位不能超过9位,小数位不能超过2为
  if(array[0].length()>9 || (array.length>1 &&array[1].length()>2)) {
    //抛出异常
  }
  return array;
  }
}
以上为个人经验,希望能给大家一个参考,也希望大家多多支持CodeAE代码之家。如有错误或未考虑完全的地方,望不吝赐教。
原文链接:https://blog.csdn.net/qiucheng_198806/article/details/88837186

关注下面的标签,发现更多相似文章