1. 程式人生 > >java數字貨幣轉換成人民幣大寫

java數字貨幣轉換成人民幣大寫

package com.hs.hsloan.web.controller.app;

import java.math.BigDecimal;

/**
 * 數字轉換為漢語中人民幣的大寫<br>
 * @ClassName: MoneyToCNY 
 * @Description: TODO( ) 
 * @author 文鵬
 * @date 2013-10-31 下午5:33:45 
 *
 */
public class MoneyToCNY {
    /**
     * 漢語中數字大寫
     */
    private static final String[] CN_UPPER_NUMBER = { "零", "壹", "貳", "叄", "肆",
            "伍", "陸", "柒", "捌", "玖" };
    /**
     * 漢語中貨幣單位大寫,這樣的設計類似於佔位符
     */
    private static final String[] CN_UPPER_MONETRAY_UNIT = { "分", "角", "元",
            "拾", "佰", "仟", "萬", "拾", "佰", "仟", "億", "拾", "佰", "仟", "兆", "拾",
            "佰", "仟" };
    /**
     * 特殊字元:整
     */
    private static final String CN_FULL = "整";
    /**
     * 特殊字元:負
     */
    private static final String CN_NEGATIVE = "負";
    /**
     * 金額的精度,預設值為2
     */
    private static final int MONEY_PRECISION = 2;
    /**
     * 特殊字元:零元整
     */
    private static final String CN_ZEOR_FULL = "零元" + CN_FULL;

    /**
     * 把輸入的金額轉換為漢語中人民幣的大寫
     * 
     * @param numberOfMoney
     *            輸入的金額
     * @return 對應的漢語大寫
     */
    public static String number2CNMontrayUnit(BigDecimal numberOfMoney) {
        StringBuffer sb = new StringBuffer();
        // -1, 0, or 1 as the value of this BigDecimal is negative, zero, or
        // positive.
        int signum = numberOfMoney.signum();
        // 零元整的情況
        if (signum == 0) {
            return CN_ZEOR_FULL;
        }
        //這裡會進行金額的四捨五入
        long number = numberOfMoney.movePointRight(MONEY_PRECISION)
                .setScale(0, 4).abs().longValue();
        // 得到小數點後兩位值
        long scale = number % 100;
        int numUnit = 0;
        int numIndex = 0;
        boolean getZero = false;
        // 判斷最後兩位數,一共有四中情況:00 = 0, 01 = 1, 10, 11
        if (!(scale > 0)) {
            numIndex = 2;
            number = number / 100;
            getZero = true;
        }
        if ((scale > 0) && (!(scale % 10 > 0))) {
            numIndex = 1;
            number = number / 10;
            getZero = true;
        }
        int zeroSize = 0;
        while (true) {
            if (number <= 0) {
                break;
            }
            // 每次獲取到最後一個數
            numUnit = (int) (number % 10);
            if (numUnit > 0) {
                if ((numIndex == 9) && (zeroSize >= 3)) {
                    sb.insert(0, CN_UPPER_MONETRAY_UNIT[6]);
                }
                if ((numIndex == 13) && (zeroSize >= 3)) {
                    sb.insert(0, CN_UPPER_MONETRAY_UNIT[10]);
                }
                sb.insert(0, CN_UPPER_MONETRAY_UNIT[numIndex]);
                sb.insert(0, CN_UPPER_NUMBER[numUnit]);
                getZero = false;
                zeroSize = 0;
            } else {
                ++zeroSize;
                if (!(getZero)) {
                    sb.insert(0, CN_UPPER_NUMBER[numUnit]);
                }
                if (numIndex == 2) {
                    if (number > 0) {
                        sb.insert(0, CN_UPPER_MONETRAY_UNIT[numIndex]);
                    }
                } else if (((numIndex - 2) % 4 == 0) && (number % 1000 > 0)) {
                    sb.insert(0, CN_UPPER_MONETRAY_UNIT[numIndex]);
                }
                getZero = true;
            }
            // 讓number每次都去掉最後一個數
            number = number / 10;
            ++numIndex;
        }
        // 如果signum == -1,則說明輸入的數字為負數,就在最前面追加特殊字元:負
        if (signum == -1) {
            sb.insert(0, CN_NEGATIVE);
        }
        // 輸入的數字小數點後兩位為"00"的情況,則要在最後追加特殊字元:整
        if (!(scale > 0)) {
            sb.append(CN_FULL);
        }
        return sb.toString();
    }

    public static void main(String[] args) {
        double money = 0.158218;
        BigDecimal numberOfMoney = new BigDecimal(money);
        String s = MoneyToCNY.number2CNMontrayUnit(numberOfMoney);
        System.out.println("你輸入的金額為:【"+ money +"】   #--# [" +s.toString()+"]");
    }
}


相關推薦

java數字貨幣轉換人民幣大寫

package com.hs.hsloan.web.controller.app; import java.math.BigDecimal; /** * 數字轉換為漢語中人民幣的大寫<br> * @ClassName: MoneyToCNY * @Description: TODO(

Java學習小試牛刀之數字金額轉換人民幣大寫

       實現一個將輸入的浮點型數值轉化為一個按照人名幣讀寫方式大寫的字串。        由於部分已經比較詳細了,不再做多餘說明。思路可以參考開頭的多行註釋。有一點要提醒,String類定義的字串是不能改變的,此處為了能夠方便的實現字串的增刪,採用的是StringBu

php數字金額轉換中文大寫顯示

整個功能其實不難,只是還算挺實用,所以記一下哈,其他程式語言轉換一下也是能可以的! 思路:把傳過來的金額轉換成整數和小數兩部分,再對其分別進行轉換處理 程式碼附上: function moneyToString($num) { $digits = ['零', '壹', '貳'

數字日期轉換漢字大寫日期

function cnDate(enDate) { //用於將“2003-01-14”這種格式的日期更改為“二○○三年一月十四日” var OldYear,OldMonth,OldDate; var NewYear,NewMonth,NewDate; var i,sT

Java實現阿拉伯數字轉換中文大寫數字,以及中文大寫數字到阿拉伯數字轉換

學習王曉華老師的《演算法的樂趣》一書中第四章之後,用Java重寫並實現這一功能。 該文章是在學習完該章之後的一個學習總結,以供自己複習使用。 由於現在剛開始學習Java,為了熟悉Java的變成規範,因此,用Java實現這一功能。 public class NumberToC

Java金額轉換_阿拉伯數字轉換中國大寫數字

這個題目我在網上看到有好多種做法,我自己也想出了一種做法 import java.io.BufferedReader; import java.io.IOException; import java.io.InputStreamReader; /* * 思路: * 1

完成將 toChineseNum, 可以將數字轉換中文大寫的表示,處理到萬級別,例如 toChineseNum(12345),返回 一萬二千三百四十五

turn nts math while log 處理 [0 floor rip const toChineseNum = (num) => { const unit = [‘‘, ‘十‘, ‘百‘, ‘千‘] const counts = [‘零

萬以內的數字轉換中文大寫的方法

 閒話:一個朋友是做財務的,有一天問我98745的中文大寫是什麼,我也不知道,但是目前好多手機的計算器是可以直接轉換的,所以自己無聊也想寫一段程式碼試試於是就有了今天的水文,但是我個人覺得不算是太水,還是有點點內容的,希望喜歡的朋友可以沒事看看,我也 是一個小白,今年剛大學畢業也才工作

lua中數字人民幣大寫形式

最近寫的一個函式,需要對大家有幫助 --文字轉換 function Bank:numberToString(szNum) local szChMoney = "" local szNum = 0 local iLen = 0 local iNum = 0 loc

阿拉伯數字轉換中文大寫數字

function UpGB(InData:real):string; var a1,a2,a3,a4,a5,a6,a7:real; begin   a1 := int(InData/10000);   a2 := int((InData-a1*10000)/1000);  

js 數字金額大小寫轉換中文大寫

function Arabia_to_Chinese(Num) { for(i=Num.length-1;i>=0;i--) { Num = Num.replace(",","")//替換tomoney()中的“,” Num = Num.rep

JAVA之字串轉換首字母大寫,其餘小寫

package yu;public class Main {public static void main(String[] args) {String str="abcdefgHIJK";//定義一串字元String str1=str.substring(0, 1).toU

將浮點數轉換人民幣讀法字串(JAVA

public class NumRmb{ private String[] hanArr = {"零" , "壹" , "貳" , "叄" , "肆" , "伍" , "陸" , "柒", "捌" , "玖"}; private String[] unitArr =

java程式---將一個浮點數轉換人民幣讀法

程式碼如下: <span style="font-size:18px;">package test; import java.util.Scanner; //將輸入的浮點型錢數,轉成人民幣讀法 public class Num2Rmb { private

JAVA字串如何轉換數字(詳解)

1.如果是純數字字串如 :“123456” 則可以用一下方法: int number = Integer.valueOf("123456"); 2. 如果是單個字元或者字串則需要先切開轉換為char字元再轉換  不然像上面直接轉化會空指標異常 String

SSRS 實現數字金額轉換為中文大寫漢字

and pre lds 2.0 ber 部分 ima 中文 res 比如: 金額=49,701,120.00,將其轉換為“肆仟玖佰柒拾萬壹仟壹佰貳拾元整”;金額 289,546.52 ,轉換為 “貳拾捌萬玖仟伍佰肆拾陸元伍角貳分”。 解決方法:添加VB的轉換函數寫在CO

用MyEclipse將java文件轉換UML類圖

lan 網上 uml b2c water 的人 通用 其他 gravity 用MyEclipse將java文件轉換成UML類圖 參考: 用MyEclipse將java文件轉換成UML類圖 - 君臨天下的博客 - CSDN博客 http://blog.csdn.net/da

WORD2010如何把全角字母和數字批量轉換半角

last word2010 需要 def 如何 半角 復制粘貼 brief name 個人覺得全角字符看起來相當別扭,如果文檔中存在大量全角形式的字母和數字,要如何把它們全部轉化成半角的呢? 全角和半角 全角是指一個字符占用兩個標準字

matlab 將數字矩陣轉換圖像

之間 灰度 範圍 黑白 最好 沒有 imshow 原理 記錄 MATLAB中,常常使用imshow()函數來顯示圖像,而此時的圖像矩陣可能經過了某種運算。在matlab中,為了保證精度,經過了運算的圖像矩陣I其數據類型會從unit8型變成double型。如果直接運行imsh

數字金額轉漢字大寫

負數 big 漢字 all AD AR || git return /** 數字金額大寫轉換(可以處理整數,小數,負數) */ function smalltoBIG(n) { var fraction = [‘角