做財務報表時常需要將金額轉化中文數字大寫,有點坑。
/**
*@author :qzc
*@createdate :2023年6月22日 下午6:08:20
*@version :1
* 類(介面)主要功能:
**/public
class
numbertocn ;
/*** 漢語中貨幣單位大寫,這樣的設計類似於佔位符
*/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)
//這裡會進行金額的四捨五入
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))
if ((scale > 0) && (!(scale % 10 > 0)))
int zerosize = 0;
while (true)
// 每次獲取到最後乙個數
numunit = (int) (number % 10);
if (numunit > 0)
if ((numindex == 13) && (zerosize >= 3))
sb.insert(0, cn_upper_monetray_unit[numindex]);
sb.insert(0, cn_upper_number[numunit]);
getzero = false;
zerosize = 0;
} else
if (numindex == 2)
} else
if (((numindex - 2) % 4 == 0) && (number % 1000 > 0))
getzero = true;
}// 讓number每次都去掉最後乙個數
number = number / 10;
++numindex;
}// 如果signum == -1,則說明輸入的數字為負數,就在最前面追加特殊字元:負
if (signum == -1)
// 輸入的數字小數點後兩位為"00"的情況,則要在最後追加特殊字元:整
if (!(scale > 0))
return sb.tostring();
}public
static
void
main(string args)
}
數字轉中文數字與中文數字轉數字
利用陣列與map的資料結構進行中文數字與數字之間的互相轉換 public class numberutil private static final char cn num private static final char cn unit private static final string c...
大寫中文數字 財務
壹 貳 叄 肆 伍 陸 柒 捌 玖 拾 佰 仟 萬 億 元 圓 角 分 零 整。這是大家經常要填寫的大寫數字,問什麼要用大寫數字呢?想必很多人都不是很清楚!先看看以下兩個有關大寫數字的 1 數碼與大 小寫數字的對照表 數碼 小寫數字 大寫數字 0 零 1 一 壹 2 二 貳 3 三 叄 參 4 四 ...
大寫中文數字 財務
壹 貳 叄 肆 伍 陸 柒 捌 玖 拾 佰 仟 萬 億 元 圓 角 分 零 整。這是大家經常要填寫的大寫數字,問什麼要用大寫數字呢?想必很多人都不是很清楚!先看看以下兩個有關大寫數字的 1 數碼與大 小寫數字的對照表 數碼 小寫數字 大寫數字 0 零 1 一 壹 2 二 貳 3 三 叄 參 4 四 ...