`
chaochaoyuyu
  • 浏览: 54526 次
  • 性别: Icon_minigender_1
  • 来自: 宁波
社区版块
存档分类
最新评论

浮点数转换人民币读数字符串

 
阅读更多
import java.math.BigDecimal;

public class ConvertNum {
  /** 定义数组存放数字对应的大写 */
  private final static String[] STR_NUMBER = { "零", "壹", "贰", "叁", "肆", "伍", "陆", "柒", "捌", "玖" };

  /** 定义数组存放位数的大写 */
  private final static String[] STR_MODIFY = { "", "拾", "佰", "仟", "万", "拾", "佰", "仟", "亿", "拾", "佰", "仟" };

  /**
   * 转化整数部分
   * 
   * @param tempString
   * @return 返回整数部分
   */
  private static String getInteger(String tempString) {
    /** 用来保存整数部分数字串 */
    String strInteger = null;//  
    /** 记录"."所在位置 */
    int intDotPos = tempString.indexOf(".");
    int intSignPos = tempString.indexOf("-");
    if (intDotPos == -1)
      intDotPos = tempString.length();
    /** 取出整数部分 */
    strInteger = tempString.substring(intSignPos + 1, intDotPos);
    strInteger = new StringBuffer(strInteger).reverse().toString();
    StringBuffer sbResult = new StringBuffer();
    for (int i = 0; i < strInteger.length(); i++) {
      sbResult.append(STR_MODIFY[i]);
      sbResult.append(STR_NUMBER[strInteger.charAt(i) - 48]);
    }
    
    sbResult = sbResult.reverse();
    replace(sbResult, "零拾", "零");
    replace(sbResult, "零佰", "零");
    replace(sbResult, "零仟", "零");
    replace(sbResult, "零万", "万");
    replace(sbResult, "零亿", "亿");
    replace(sbResult, "零零", "零");
    replace(sbResult, "零零零", "零");
    /** 这两句不能颠倒顺序 */
    replace(sbResult, "零零零零万", "");
    replace(sbResult, "零零零零", "");
    /** 这样读起来更习惯. */
    replace(sbResult, "壹拾亿", "拾亿");
    replace(sbResult, "壹拾万", "拾万");
    /** 删除个位上的零 */
    if (sbResult.charAt(sbResult.length() - 1) == '零' && sbResult.length() != 1)
      sbResult.deleteCharAt(sbResult.length() - 1);
    if (strInteger.length() == 2) {
      replace(sbResult, "壹拾", "拾");
    }
    /** 将结果反转回来. */
    return sbResult.toString();
  }

  /**
   * 转化小数部分 例:输入22.34返回叁肆
   * 
   * @param tempString
   * @return
   */
  private static String getFraction(String tempString) {
    String strFraction = null;
    int intDotPos = tempString.indexOf(".");
    /** 没有点说明没有小数,直接返回 */
    if (intDotPos == -1)
      return "";
    strFraction = tempString.substring(intDotPos + 1);
    StringBuffer sbResult = new StringBuffer(strFraction.length());
    for (int i = 0; i < strFraction.length(); i++) {
      sbResult.append(STR_NUMBER[strFraction.charAt(i) - 48]);
    }
    return sbResult.toString();
  }

  /**
   * 判断传入的字符串中是否有.如果有则返回点
   * 
   * @param tempString
   * @return
   */
  private static String getDot(String tempString) {
    return tempString.indexOf(".") != -1 ? "点" : "";
  }

  /**
   * 判断传入的字符串中是否有-如果有则返回负
   * 
   * @param tempString
   * @return
   */
  private static String getSign(String tempString) {
    return tempString.indexOf("-") != -1 ? "负" : "";
  }

  /**
   * 将一个数字转化为金额
   * 
   * @param tempNumber 传入一个double的变量
   * @return 返一个转换好的字符串
   */
  public static String numberToChinese(double tempNumber) {
    java.text.DecimalFormat df = new java.text.DecimalFormat("#.#########");
    String pTemp = String.valueOf(df.format(tempNumber));
    StringBuffer sbResult = new StringBuffer(getSign(pTemp) + getInteger(pTemp) + getDot(pTemp) + getFraction(pTemp));
    return sbResult.toString();
  }

  public static String numberToChinese(BigDecimal tempNumber) {
    return numberToChinese(tempNumber.doubleValue());
  }

  /**
   * 替代字符
   * 
   * @param pValue
   * @param pSource
   * @param pDest
   */
  private static void replace(StringBuffer pValue, String pSource, String pDest) {
    if (pValue == null || pSource == null || pDest == null)
      return;
    /** 记录pSource在pValue中的位置 */
    int intPos = 0;
    do {
      intPos = pValue.toString().indexOf(pSource);
      /** 没有找到pSource */
      if (intPos == -1)
        break;
      pValue.delete(intPos, intPos + pSource.length());
      pValue.insert(intPos, pDest);
    } while (true);
  }

  /**
   * @param args
   */
  public static void main(String[] args) {
    System.out.println(numberToChinese(1230400567.8934));
  }
}
 
分享到:
评论

相关推荐

    labview IEE754浮点数转换程序,通过串口采集到的十六进制字符串转换成单精度的浮点数,浮点数转换成十六进制字符串

    labview IEE754浮点数转换程序,通过串口采集到的十六进制字符串转换成单精度的浮点数,浮点数转换成十六进制字符串

    C语言浮点数转字符串_C语言浮点数字符串_浮点数转换_

    在C语言中,将浮点数转换为字符串是一项常见的任务,尤其在需要将数值数据输出到文件或屏幕上时。这个过程通常涉及到`printf`函数家族的使用,它们能够按照指定的格式将各种类型的数据转化为可读的字符串。本文将...

    电子-浮点数转换成字符串.c

    电子-浮点数转换成字符串.c,单片机/嵌入式STM32-F0/F1/F2

    疯狂Java讲义 浮点数转换成人民币读法

    总的来说,将浮点数转换为人民币读法是一个涉及数值处理、字符串操作和格式化技术的综合性问题,通过这个实践可以加深对Java编程的理解,并提升编程技巧。在实际工作中,这样的转换可能还会涉及到多语言环境下的本地...

    float_2_char.zip_C51 float转char_单片机 浮点数_浮点数 char_浮点数 转换_浮点数转换

    - 波形格式:在通信协议中,浮点数通常被转换为特定的字符串格式,例如科学记数法。 - 错误处理:考虑到可能出现的溢出、下溢、解析错误等情况,需要有相应的错误处理机制。 `float_2_char`的源代码应该包含了...

    C#浮点数和16进制字节数互相转换

    本文将深入探讨如何使用C#来实现单精度浮点数(Single)与16进制字符串的相互转换。 首先,我们需要了解浮点数在计算机中的存储方式。单精度浮点数(Single)在C#中占用4个字节(32位),按照IEEE 754标准,这32位...

    自己动手写C语言float浮点数转换字符串的函数

    在C语言中,将浮点数转换为字符串是一项基本任务,常常用于数据的输出和文件存储。本篇文章将深入探讨如何自己动手编写一个C语言函数,实现`float`类型的浮点数转换为字符串的功能。首先,我们需要理解浮点数在...

    浮点数转换成ASCII字符串源代码(自编)

    学习c过程中,编写的浮点数转成ASCII字符串的函数,包括源代码和测试程序,在gcc-3.4.5-20060117-3和VS2008下均编译通过,并运行结果正确。 如果你在测试的过程中发现输出结果不正确,欢迎跟我联系,以便进一步改进...

    VBA实现单精度浮点数与十六进制字符串相互转换

    VBA实现单精度浮点数与十六进制字符串相互转换,并提供2个相互转换的示例 第一个按钮: "A1录入十六进制8位字符串; B1输出单精度浮点数结果" 第二个按钮 "将B1作为单精度浮点数输入 C1输出16进制结果

    十六进制字符串到浮点数,整型的相互转换源代码(qt+vc2010)

    本文将深入探讨十六进制字符串与浮点数、整型之间的转换,并提供在Qt和VC2010环境下实现这些转换的源代码。 首先,我们要理解不同进制的概念。在计算机科学中,我们常用的是二进制、八进制、十进制和十六进制。十六...

    062 浮点数转换为字符串 C语言

    浮点数转换为字符串是C语言编程中常见的一项任务,特别是在需要将计算结果输出到控制台或保存到文件时。这个过程涉及到C语言中的类型转换和格式化输出,主要使用了`printf`函数来实现。在C语言中,浮点数包括`float`...

    浮点数字符串相互转换

    在编程领域,浮点数和字符串之间的转换是常见的操作,特别是在数据处理、用户输入输出以及文件存储等场景。本文将详细讲解如何使用C语言实现浮点数与字符串之间的转换,以满足标题和描述中提到的需求。 首先,让...

    ryu:将浮点数转换为十进制字符串

    该项目包含使用最短,固定的%f和科学的%e格式将IEEE-754浮点数转换为十进制字符串的例程。 主要的实现是在C中进行的,并且到Java的转换最短。 所有算法均已在同行评审的出版物中发表。 在撰写本文时,这些是已知最...

    C++实现定点算法将浮点数转为字符串

    该方法通过对IEEE 754标准下的浮点数编码规则进行硬解码,进而实现浮点数到字符串的转换。尽管这种方法在效率上不及其他常规手段,但在精度方面具有显著优势,并且其清晰的实现思路对于深入理解浮点数的工作原理非常...

    Float Convert delphi浮点数转换成字符串..rar

    在Delphi编程环境中,将浮点数转换为字符串是一个常见的任务,这涉及到数值类型与文本之间的数据转换。本文将深入探讨Delphi中如何实现这一操作,以及相关的重要知识点。 首先,Delphi是一种基于Pascal语言的开发...

    Labview10进制浮点数IEEE754与字符串16进制之间的转换

    当你需要将一个浮点数转换为人类可读的字符串时,可以使用LabVIEW的“数字符串转换”函数,它能将数值转换为各种格式的字符串,包括科学记数法、固定小数点等。在2017版本中,这一功能更为完善,支持自定义转换参数...

    double浮点数转换成字符串源码

    ### double浮点数转换成字符串源码解析 #### 概述 在计算机编程领域,将浮点数(如`double`类型)转换为字符串是一项常见的需求。这种转换通常用于输出结果、日志记录或者与其他非数值处理系统进行交互。本文将...

    ASCII转换至十六进制字符串与二进制字符串显示_labview_字符串转换_

    在LabVIEW编程环境中,字符串转换是一项基础且重要的任务。标题提到的"ASCII转换至十六进制字符串与二进制字符串显示"是指将ASCII编码的字符转换为对应的十六进制和二进制表示形式,并在LabVIEW界面上进行展示。下面...

    TIA博途中字符串转换相关指令的使用方法(一).docx

    例如,在全局 DB 中创建四个变量,用来保存数据,然后在 OB1 中调用 STRG_VAL 指令,并连接参数,选择字符串的数据类型和浮点数的数据类型,将需要转换的字符串在输出参数 OUT 中作为浮点数输出。 * VAL_STRG 指令:...

    labview 10进制字符串强制转换为16进制字符串

    本VI实现十进制字符串强制转换为16进制字符串,即输入10进制的0CDA可输出16进制的0CDA

Global site tag (gtag.js) - Google Analytics