zoukankan      html  css  js  c++  java
  • RMB 转大写的一个小demo

    昨天做了一道 面试题     本来以为很简单的    结果出了点岔子   发现原因后简直无语     

    原来浮点类型的数值  在数值达到1000W时   java中会用科学计数法表示    平常没有注意到   

    float f =120_024_436f;
    double d=120_024_436d;
    int i= 120_024_436;
    结果依次为:
    
    1.20024432E8
    1.20024436E8
    120024436
    
    同样的实际值  不同类型的表示  其中f的精度还降低了   


    如果不想用科学计数法  必须进行格式化操作 再进行处理


    package com.test;


    import java.text.DecimalFormat;
    import java.util.Scanner;

    public class RmbToChar {
    public static void main(String[] args) {
    //防止double类型的转字符串以科学计数法表示
    Scanner scan = new Scanner(System.in);//
    System.out.print("请输入金额:");
    double rst = scan.nextDouble();
    rmbToChar(rst);//接收金额数
    }

    //思路 先把数转化String类型的字符串
    private static voidrmbToChar(doublev) {//形参为金额数

    // String num=Double.toString(v);

    DecimalFormat decimalFormat = new DecimalFormat(".0000");//数字格式化 避免科学计数法跟逗号
    // String num = decimalFormat.format(v).replace(",",""); //去除
    String num = decimalFormat.format(v);
    /*大写码表*/
    String[] numberMap = {"","","","","","","","","",""};
    /*整数部分
    * substring()分割整数部分小数部分
    * */
    String integerPart = num.substring(0,num.indexOf("."));
    /*小数部分*/
    String decimalsPart = num.substring(num.indexOf(".") +1, num.length());
    /*测试是否分离成功*/
    System.out.println(integerPart + decimalsPart);
    //将整数部分字符串分割成字符装入一个字符类型的数组容器
    char[] integerParts = integerPart.toCharArray();
    //将小数部分字符串分割成字符装入一个字符类型的数组容器
    char[] decimalsParts = decimalsPart.toCharArray();
    // //打印整数部分
    //
    for (int i = 0;i < integerParts.length;i++) {
    System.out.print(numberMap[Integer.parseInt(String.valueOf(integerParts[i]))]);
    switch (integerParts.length- i) {
    case 10:
    System.out.print("");
    break;
    case 9:
    System.out.print("亿");
    break;
    case 8:
    System.out.print("");
    break;
    case 7:
    System.out.print("");
    break;
    case 6:
    System.out.print("");
    break;
    case 5:
    System.out.print("");
    break;
    case 4:
    System.out.print("");
    break;
    case 3:
    System.out.print("");
    break;
    case 2:
    System.out.print("");
    break;
    default:
    System.out.print("");
    }
    }

    //打印小数部分
    if(Integer.parseInt(decimalsPart) != 0) { //如果小数为是 非零
    for(int i = 0;i < decimalsParts.length;i++) {
    System.out.print(numberMap[Integer.parseInt(String.valueOf(decimalsParts[i]))]);
    switch (i) {
    case 0:
    System.out.print("");
    break;
    case 1:
    System.out.print("");
    break;
    case 2:
    System.out.print("");
    break;
    default:
    System.out.print("");
    }
    }

    } else { //小数位 全为零
    System.out.print("");
    }
    }
    }
  • 相关阅读:
    mysqldump指定编码导出数据
    centos 自带mysql卸载时出现无法卸载情况
    Linux下如何彻底删除MySQL
    输出一行字符串中的最长单词---调用函数
    span设置固定宽度
    如何使用Reaver破解Wi-Fi网络的WPA密码
    kernel hexdump分析 (2.0)
    C++基础学习笔记----第七课(面向对象的基本概念)
    有关java中的final关键字
    测试framebuffer
  • 原文地址:https://www.cnblogs.com/felordcn/p/12142617.html
Copyright © 2011-2022 走看看