chinese-number-format
Version:
中文數字轉換Chinese numeral conversion
171 lines (143 loc) • 7.2 kB
text/typescript
import {
toChinese,
toChineseWithUnits,
toNumber,
toUpperCase,
toChineseApproximate,
toChineseMonth,
} from '../src/index';
describe('toChinese 函數', () => {
test('應該將整數轉換為中文字 (繁體)', () => {
expect(toChinese(1234567890)).toBe('一二三四五六七八九零');
expect(toChinese(0)).toBe('零');
expect(toChinese(9999999999)).toBe('九九九九九九九九九九');
});
test('應該將整數轉換為中文字 (簡體)', () => {
expect(toChinese(1234567890, 'zh-CN')).toBe('一二三四五六七八九零');
expect(toChinese(0, 'zh-CN')).toBe('零');
});
test('應該將小數轉換為中文字 (繁體)', () => {
expect(toChinese(123.45)).toBe('一二三點四五');
expect(toChinese(0.1)).toBe('零點一');
});
test('應該將小數轉換為中文字 (簡體)', () => {
expect(toChinese(123.45, 'zh-CN')).toBe('一二三点四五');
expect(toChinese(0.1, 'zh-CN')).toBe('零点一');
});
});
describe('toChineseWithUnits 函數', () => {
test('應該將整數轉換為帶單位的中文字 (繁體)', () => {
expect(toChineseWithUnits(1234567890)).toBe('一十二億三千四百五十六萬七千八百九十');
expect(toChineseWithUnits(10000)).toBe('一萬');
expect(toChineseWithUnits(100000000)).toBe('一億');
expect(toChineseWithUnits(1000000000000)).toBe('一兆');
});
test('應該將整數轉換為帶單位的中文字 (簡體)', () => {
expect(toChineseWithUnits(1234567890, 'zh-CN')).toBe('一十二亿三千四百五十六万七千八百九十');
expect(toChineseWithUnits(10000, 'zh-CN')).toBe('一万');
expect(toChineseWithUnits(100000000, 'zh-CN')).toBe('一亿');
expect(toChineseWithUnits(1000000000000, 'zh-CN')).toBe('一兆');
});
test('應該正確處理零', () => {
expect(toChineseWithUnits(0)).toBe('零');
expect(toChineseWithUnits(0, 'zh-CN')).toBe('零');
});
test('應該將小數轉換為帶單位的中文字 (繁體)', () => {
expect(toChineseWithUnits(123.45)).toBe('一百二十三點四五');
expect(toChineseWithUnits(1000.1)).toBe('一千點一');
});
test('應該將小數轉換為帶單位的中文字 (簡體)', () => {
expect(toChineseWithUnits(123.45, 'zh-CN')).toBe('一百二十三点四五');
expect(toChineseWithUnits(1000.1, 'zh-CN')).toBe('一千点一');
});
test('應該正確處理大數字 (繁體)', () => {
expect(toChineseWithUnits(1e16)).toBe('一京');
expect(toChineseWithUnits(1e20)).toBe('一垓');
expect(toChineseWithUnits(1e24)).toBe('一秭');
});
test('應該正確處理大數字 (簡體)', () => {
expect(toChineseWithUnits(1e16, 'zh-CN')).toBe('一京');
expect(toChineseWithUnits(1e20, 'zh-CN')).toBe('一垓');
expect(toChineseWithUnits(1e24, 'zh-CN')).toBe('一秭');
expect(toChineseWithUnits(1e28, 'zh-CN')).toBe('一穰');
expect(toChineseWithUnits(1e32, 'zh-CN')).toBe('一沟');
expect(toChineseWithUnits(1e36, 'zh-CN')).toBe('一涧');
expect(toChineseWithUnits(1e40, 'zh-CN')).toBe('一正');
expect(toChineseWithUnits(1e44, 'zh-CN')).toBe('一载');
});
});
describe('toChineseApproximate 函數', () => {
test('應該正確處理近似值 (繁體)', () => {
expect(toChineseApproximate(12345)).toBe('一點二萬');
expect(toChineseApproximate(1234567890)).toBe('十二點三億');
});
test('應該正確處理近似值 (簡體)', () => {
expect(toChineseApproximate(12345, { locale: 'zh-CN' })).toBe('一点二万');
expect(toChineseApproximate(1234567890, { locale: 'zh-CN' })).toBe('十二点三亿');
});
test('應該支援自定義精度', () => {
expect(toChineseApproximate(12345, { precision: 2 })).toBe('一點二三萬');
expect(toChineseApproximate(12345, { locale: 'zh-CN', precision: 2 })).toBe('一点二三万');
});
test('應該在小於一萬時返回完整數字', () => {
expect(toChineseApproximate(9999)).toBe('九千九百九十九');
expect(toChineseApproximate(9999, { locale: 'zh-CN' })).toBe('九千九百九十九');
});
});
describe('toNumber 函數', () => {
test('應該將中文字轉換為數字', () => {
expect(toNumber('一二三四五六七八九零')).toBe(1234567890);
expect(toNumber('零')).toBe(0);
});
test('應該將大寫中文字轉換為數字', () => {
expect(toNumber('壹貳參肆伍陸柒捌玖零')).toBe(1234567890);
expect(toNumber('零')).toBe(0);
});
test('應該將中文小數轉換為數字', () => {
expect(toNumber('一二三點四五')).toBe(123.45);
expect(toNumber('一二三点四五')).toBe(123.45);
});
test('應該處理無效輸入', () => {
expect(toNumber('無效輸入')).toBeNaN();
expect(toNumber('一二三四A')).toBeNaN();
expect(toNumber('')).toBeNaN();
});
});
describe('toUpperCase 函數', () => {
test('應該將中文數字轉換為大寫 (繁體)', () => {
expect(toUpperCase('一二三')).toBe('壹貳參');
expect(toUpperCase('零一二三四五六七八九')).toBe('零壹貳參肆伍陸柒捌玖');
});
test('應該將中文數字轉換為大寫 (簡體)', () => {
expect(toUpperCase('一二三', 'zh-CN')).toBe('壹贰叁');
expect(toUpperCase('零一二三四五六七八九', 'zh-CN')).toBe('零壹贰叁肆伍陆柒捌玖');
});
test('應該處理小數點', () => {
expect(toUpperCase('一二三點四五')).toBe('壹貳參點肆伍');
expect(toUpperCase('一二三点四五', 'zh-CN')).toBe('壹贰叁点肆伍');
});
test('應該保留非數字字符', () => {
expect(toUpperCase('abc123')).toBe('abc123');
expect(toUpperCase('測試123')).toBe('測試123');
});
});
describe('toChineseMonth 函數', () => {
test('應該正確轉換月份 (簡單格式)', () => {
expect(toChineseMonth(1)).toBe('一月');
expect(toChineseMonth(12)).toBe('十二月');
});
test('應該正確轉換月份 (繁體傳統格式)', () => {
expect(toChineseMonth(1, { format: 'traditional' })).toBe('正月');
expect(toChineseMonth(12, { format: 'traditional' })).toBe('臘月');
});
test('應該正確轉換月份 (簡體傳統格式)', () => {
expect(toChineseMonth(1, { locale: 'zh-CN', format: 'traditional' })).toBe('正月');
expect(toChineseMonth(12, { locale: 'zh-CN', format: 'traditional' })).toBe('腊月');
});
test('應該處理無效輸入', () => {
expect(toChineseMonth(0)).toBe('');
expect(toChineseMonth(13)).toBe('');
expect(toChineseMonth(1.5)).toBe('');
expect(toChineseMonth(-1)).toBe('');
});
});