New Case Study:See how Anthropic automated 95% of dependency reviews with Socket.Learn More
Socket
Sign inDemoInstall
Socket

chinese-numbers-converter

Package Overview
Dependencies
Maintainers
1
Versions
17
Alerts
File Explorer

Advanced tools

Socket logo

Install Socket

Detect and block malicious and high-risk dependencies

Install

chinese-numbers-converter - npm Package Compare versions

Comparing version 1.0.2 to 2.0.0

82

chinese-numbers.js

@@ -37,3 +37,2 @@ /**

'肆': 4,

@@ -87,2 +86,10 @@ '四': 4,

/** For converting strings like 8千3萬 into 8千3百萬. */
ChineseNumber.reverseMultipliers = {
'10': '十',
'100': '百',
'1000': '千',
'10000': '萬',
};
/**

@@ -98,4 +105,11 @@ * Returns the result of the conversion of Chinese number into an `Integer`.

if (str === null || str === undefined || str === '') {
throw 'Empty strings cannot be converted.';
}
str = str.replace(/[,\s]/g, ''); // remove commas, spaces
// Convert something like 8千3萬 into 8千3百萬 (8300*10000)
str = this.addMissingUnits(str);
// If the number begins with arabic numerals, parse and remove them first.

@@ -110,3 +124,3 @@ // Example: 83萬. This number will be multiplied by the remaining part at

}
// Now parse the actual Chinese, character by character:

@@ -150,3 +164,3 @@ var len = str.length;

var numbersSoFar = 0;
pairs.forEach(function (pair) {

@@ -228,3 +242,3 @@ numbersSoFar += pair[0] * pair[1];

}
}
};

@@ -327,3 +341,3 @@ /**

// Add a space, otherwise 1000萬800呎 will become 10000000800呎
translated += ' ';
translated += ' ';
} else {

@@ -355,3 +369,5 @@ // If `minimumCharactersInNumber` is set, do not translate short

previousCharacterIsNumber = false;
// Cannot be false, otherwise `if (previousCharacterIsNumber) {`
// below will fail for numbers that end with space:
previousCharacterIsNumber = true;
previousCharacterIsChineseNumber = false;

@@ -370,3 +386,3 @@ } else {

clearChineseNumber = chineseNumber.replace(/[,\s]/g, '');
if (clearChineseNumber === '' && chineseNumber.length === 1) {
if (clearChineseNumber === '' && chineseNumber.length === 1) {
// If the 'number' we assembled is actually something like comma,

@@ -388,2 +404,3 @@ // space, or multiple commas and spaces, and occurs at the beginning:

// Still add the current (non-number character) to the translated string:
translated += character;

@@ -407,2 +424,53 @@

/**
* Converts a string like 8千3萬 into 8千3百萬 (8300*10000).
* @param {string} str - The original string.
* @returns {string} The converted, expanded string.
*/
ChineseNumber.prototype.addMissingUnits = function (str) {
var characters = str.split('');
var result = '';
var numbers = ChineseNumber.numbers;
var reverse = ChineseNumber.reverseMultipliers;
characters.forEach(function (character, i) {
if (i === 0) {
// For the first character, we don't have a previous character yet, so
// just skip it:
result += character;
} else {
var arabic = isNaN(character) ? numbers[character] : parseInt(character); // if it's already arabic, just use the arabic number
var previousNumber = numbers[characters[i - 1]] || characters[i - 1];
var previousCharacterAsMultiplier = reverse[previousNumber.toString().replace('*', '')] ? previousNumber.toString().replace('*', '') : undefined;
var nextCharacterArabic = (numbers[characters[i + 1]] || 0).toString().replace('*', '');
if (
// not a multiplier like '*100':
typeof arabic === 'number' &&
// in the 1-9 range:
arabic > 0 && arabic < 10 &&
// previous character is 10, 100, 1000 or 10000:
previousCharacterAsMultiplier !== undefined &&
// e.g. 1000 < 10000 for 8千3萬, or it's the last character in string:
(parseInt(previousCharacterAsMultiplier) < parseInt(nextCharacterArabic) || characters[i + 1] === undefined) &&
// For numbers like 十五, there are no other units to be appended at the end
previousCharacterAsMultiplier !== '10'
) {
// E.g. for 8千3, add 百:
var oneOrderSmaller = (parseInt(previousCharacterAsMultiplier) / 10).toString();
var missingMultiplier = reverse[oneOrderSmaller];
result += character + missingMultiplier;
}
else {
result += character;
}
}
});
module.exports = ChineseNumber;

2

package.json
{
"name": "chinese-numbers-converter",
"version": "1.0.2",
"version": "2.0.0",
"description": "Converts Chinese numerals in a string into Arabic numerals.",

@@ -5,0 +5,0 @@ "main": "chinese-numbers.js",

SocketSocket SOC 2 Logo

Product

  • Package Alerts
  • Integrations
  • Docs
  • Pricing
  • FAQ
  • Roadmap
  • Changelog

Packages

npm

Stay in touch

Get open source security insights delivered straight into your inbox.


  • Terms
  • Privacy
  • Security

Made with ⚡️ by Socket Inc