npm package discovery and stats viewer.

Discover Tips

  • General search

    [free text search, go nuts!]

  • Package details

    pkg:[package-name]

  • User packages

    @[username]

Sponsor

Optimize Toolset

I’ve always been into building performant and accessible sites, but lately I’ve been taking it extremely seriously. So much so that I’ve been building a tool to help me optimize and monitor the sites that I build to make sure that I’m making an attempt to offer the best experience to those who visit them. If you’re into performant, accessible and SEO friendly sites, you might like it too! You can check it out at Optimize Toolset.

About

Hi, 👋, I’m Ryan Hefner  and I built this site for me, and you! The goal of this site was to provide an easy way for me to check the stats on my npm packages, both for prioritizing issues and updates, and to give me a little kick in the pants to keep up on stuff.

As I was building it, I realized that I was actually using the tool to build the tool, and figured I might as well put this out there and hopefully others will find it to be a fast and useful way to search and browse npm packages as I have.

If you’re interested in other things I’m working on, follow me on Twitter or check out the open source projects I’ve been publishing on GitHub.

I am also working on a Twitter bot for this site to tweet the most popular, newest, random packages from npm. Please follow that account now and it will start sending out packages soon–ish.

Open Software & Tools

This site wouldn’t be possible without the immense generosity and tireless efforts from the people who make contributions to the world and share their work via open source initiatives. Thank you 🙏

© 2024 – Pkg Stats / Ryan Hefner

number-to-zh

v0.0.1

Published

阿拉伯数字转(大写,小写)简 / 繁体中文数字

Downloads

38

Readme

Number-to-zh

NPM version Downloads License GitHub stars

阿拉伯数字转(大写,小写)简 / 繁体中文数字

Highlights

  • 📦 零依赖:无需依赖其他库或框架。
  • 📣 支持万亿和亿亿:适配简体中文特殊习惯
  • ⚙️ 支持 ESM、CJS 和 IIFE 引入:可根据项目需求选择合适的引入方式。
  • 📝 支持简体中文和繁体中文的大小写数字:满足不同语境下的需求。
  • 🔢 大数支持:显示大数无精度问题,保持精确性。
  • ⭕️ 编号或是日期:提供编号与数字之间的翻译。
  • 🔧 可自定义配置:根据个人需求调整库的行为和设置。

Install

npm install number-to-zh

Usage

默认最大支持到 10^16,即千万亿,最小支持到 10^-16,如果使用万万和亿亿则没有限制。

import { numberToZh } from "number-to-zh";

numberToZh(0);                // 零
numberToZh(0.1);              // 零点一
numberToZh(-1);               // 负一
numberToZh(1e12);             // 一万亿
numberToZh(1000_0001);        // 一千万零一
numberToZh("12345678");       // 一千二百三十四万五千六百七十八

CDN

你可以借助 script 标签直接通过 CDN 来使用:

<script src="https://unpkg.com/number-to-zh/dist/number-to-zh.global.js"></script>
<script>console.log(__NUMBER_TO_ZH__.numberToZh(11));</script>

这里我们使用了 unpkg,但你也可以使用任何提供 npm 包服务的 CDN,例如 jsdelivrcdnjs。当然,你也可以下载此文件并自行提供服务。

十的口语化

「10」 读作 「一十」,但很多时候口语化读成 「十」 省略了十前面的一,可以通过 skipOneBeforeTen 参数设置:

numberToZh(10);                             // 一十
numberToZh(10, { skipOneBeforeTen: true }); // 十

繁体中文

默认使用简体小写中文,可以通过 language 指定:

numberToZh(1000_0001, { language: "zh-CN-lowercase" }); // 一千万零一
numberToZh(1000_0001, { language: "zh-CN-uppercase" }); // 壹仟万零壹
numberToZh(1000_0001, { language: "zh-TW-lowercase" }); // 一千萬零一
numberToZh(1000_0001, { language: "zh-TW-uppercase" }); // 壹仟萬零壹
numberToZh(1000_0001, { language: "zh-HK-lowercase" }); // 一千萬零一
numberToZh(1000_0001, { language: "zh-HK-uppercase" }); // 壹仟萬零壹

设置 zh-TWzh-HK 开头的语言,本质没有区别。

大数

以下内容是对简体中文的特别说明。

大数,这里指的是超过 10 千亿的数字,简体中文和繁体中文处理的逻辑不同,当数字超过万,繁体中文依然是维持四位进制,而简体中文世界采用了八位进制(破坏了分节读数法)。

根据 1984 年制定的中华人民共和国法定计量单位,十的十二次方(10^12)称为万亿,也就是说过了万之后的亿采用八位进制,即亿、十亿、百亿、千亿变成了亿、十亿、百亿、千亿、万亿、十万亿、百万亿、千万亿。

numberToZh(1_0000_0000_0000);       // 一万亿
numberToZh(1000_0000_0000_0000);    // 一千万亿

过了千万亿,单位可采用万万亿或者亿亿。

万万

默认支持:

numberToZh(1_0000_0000_0000_0000); // 一万万亿

亿亿

指定 repeatChar 的参数为——YY

numberToZh(1_0000_0000_0000_0000, { repeatChar: "YY" }); // 一亿亿

自定义数级

默认情况下,支持 10^16。

想用 「万万」 表示亿,比如四万万同胞的说法。

import { numberToZh } from "number-to-zh";

// 四万万
numberToZh(4_0000_0000, {
	language: "zh-CN-lowercase",
	magnitudeList: ["", "万", "万万"],
});

如果需要更大的单位——数级,也可以自定义。

比如根据 有关中文大数词问题的缘由和建议 的建议,简体中文数字万以上采用采用八位进制。因为万亿占用了兆,所以下一个数级是京,下面是添加对京的支持:

import { numberToZh } from "number-to-zh";

const options = {
	language: "zh-CN-lowercase",
	// repeatChar 一定是 false
	repeatChar: false,
	magnitudeList: ["", "万", "亿", "京"],
};

numberToZh("54000300020000001", options);         // 五京四千万三千亿二千万零一
numberToZh("500000004000300000000001", options);  // 五千万京四千万三千亿零一

如果简体中文数字,万以上想使用四位进制,可以用 digitsAboveTenThousand 参数实现:

import { numberToZh, RESOURCES } from "number-to-zh";

const options = {
	language: "zh-CN-lowercase",
	digitsAboveTenThousand: 4,
	magnitudeList: [...RESOURCES["zh-CN-lowercase"].magnitudeList, "京"],
};

numberToZh(1_0000_0000_0000, options);          // 一兆
numberToZh(1_0000_0000_0000_0000, options);     // 一京

繁体中文也可以在万上使用八位进制,设置 digitsAboveTenThousand 为 8 就行,也可以使用万万和亿亿,不过没啥意义。

// 一千萬億
numberToZh(1000_0000_0000_0000, {
	language: "zh-TW-lowercase",
	digitsAboveTenThousand: 8,
});

编号和日期

根据 出版物上数字用法的规定 - 中华人民共和国教育部 「〇」 仅用于编号或是日期,例如 2012 年汉字形式写为 「二〇一二」,不是 「二零一二」。

import { NumeralsConverter } from "number-to-zh";

const baseNumerals = ["〇", "一", "二", "三", "四", "五", "六", "七", "八", "九"];
const converter = new NumeralsConverter(baseNumerals);

converter.getValueFromIndex(10_0001);	// "一〇〇〇〇一"
converter.getValueFromIndex(10_0101);	// "一〇〇一〇一"
converter.getValueFromIndex(10_1001);	// "一〇一〇〇一"
converter.getValueFromIndex(10_1010);	// "一〇一〇一〇"

converter.getIndexFromValue("一〇〇〇〇一");	// "100001"
converter.getIndexFromValue("一〇〇一〇一");	// "100101"
converter.getIndexFromValue("一〇一〇〇一");	// "101001"
converter.getIndexFromValue("一〇一〇一〇");	// "101010"

API

numberToZh(num, options?)

num

Type: number | string

需要转换的阿拉伯数字,当数字是 Number 时,需要注意 JavaScript 语言本身精度丢失问题。

options

language

Type: "zh-CN-lowercase" | "zh-CN-uppercase" | "zh-TW-lowercase" | "zh-TW-uppercase" | "zh-HK-lowercase" | "zh-HK-uppercase"
Default: "zh-CN-lowercase"

阿拉伯数字转为对应的中文数字,HK 和 TW 没有区别都表示繁体中文。

skipOneBeforeTen

Type: boolean
Default: false

控制一十是否读作十。

repeatChar

Type: false | "WW" | "YY"
Default: "WW"

启用万亿情况下,重复的数级,WW 表示万万,YY 表示亿亿, false 表示万亿之后正常进入下一个数级。

digitsAboveTenThousand

Type: 4 | "Quaternary" | 8 | "Octal"

万位以上的进制,简体中文默认 8,繁体中文默认 4。

numericUnderscores

Type: string
Default: _

字符串数字中支持原生数字分节。

digitsList

Type: string[]
Default: ["", "十", "百", "千"]

对应语言的数位列表。

magnitudeList

Type: string[]
Default: ["", "万", "亿", "兆"]

对应语言的数级列表。

baseNumerals

Type: string[]
Default: ["零", "一", "二", "三", "四", "五", "六", "七", "八", "九"]

对应语言从零到九的中文数字列表。

minusSign

Type: string
Default:

对应语言「负」的写法。

decimalPoint

Type: string
Default:

对应语言「点」的写法。

new NumeralsConverter(array)

一个转换器,提供两个方法,用于获取数组项和数组下标的关系。

const converter = new NumeralsConverter(array);
converter.getValueFromIndex(index: number | string)

输入一系列数组下标返回数组的项。

converter.getIndexFromValue(strList: string)

输入一系列数组项返回数组下标。

Related

License

MIT License © 2023-Present Condor Hero