Подтвердить что ты не робот

Как преобразовать String в Number в соответствии с locale (напротив .toLocaleString)?

Если я это сделаю:

var number = 3500;
alert(number.toLocaleString("hi-IN"));

Я получу ३,५०० на хинди.

Но как я могу преобразовать его обратно в 3500. Мне нужно что-то вроде:

var str='३,५००';
alert(str.toLocaleNumber("en-US"));

Итак, он может дать 3500.

Возможно ли это с помощью javascript, jquery или любой другой бесплатной библиотеки?

4b9b3361

Ответ 1

Я думаю, что вы ищете что-то вроде:

https://github.com/jquery/globalize

Приведенная выше ссылка приведет вас на страницу проекта git. Это библиотека js, предоставленная Microsoft. Вы должны дать ему одну попытку и попытаться использовать метод formt этого плагина. Если вы хотите изучить этот плагин, вот ссылка на него:

http://weblogs.asp.net/scottgu/jquery-globalization-plugin-from-microsoft

Я надеюсь, что это то, что вы ищете, и скоро решит вашу проблему. Если это не работает, дайте мне знать.

Ответ 2

К сожалению, вам придется вручную решать локализацию. Вдохновленный этим ответом, я создал функцию, которая будет вручную заменять номера хинди:

function parseHindi(str) {
    return Number(str.replace(/[०१२३४५६७८९]/g, function (d) {
        return d.charCodeAt(0) - 2406;
    }).replace(/[०१२३४५६७८९]/g, function (d) {
        return d.charCodeAt(0) - 2415;
    }));
}

alert(parseHindi("३५००"));

Заклинание здесь: http://jsfiddle.net/yyxgxav4/

Ответ 3

Вы можете попробовать это

function ConvertDigits(input, source, target) {
var systems = {
    arabic: 48, english: 48, tamil: 3046, kannada: 3302, telugu: 3174, hindi: 2406,
    malayalam: 3430, oriya: 2918, gurmukhi: 2662, nagari: 2534, gujarati: 2790,
},
output = [], offset = 0, zero = 0, nine = 0, char = 0;
source = source.toLowerCase();
target = target.toLowerCase();

if (!(source in systems && target in systems) || input == null || typeof input == "undefined" || typeof input == "object") {
    return input;
}

input = input.toString();
offset = systems[target] - systems[source];
zero = systems[source];
nine = systems[source] + 9;    
for (var i = 0 ; i < input.length; i++) {
    var char = input.charCodeAt(i);
    if (char >= zero && char <= nine) {
        output.push(String.fromCharCode(char + offset));
    } else {
        output.push(input[i]);
    }
}
return output.join("");

}

var res = ConvertDigits ('12345678 9', 'hindi', 'english');

Я получил его здесь Если вам нужна jquery вещь, пожалуйста, попробуйте эту ссылку

Ответ 4

Используйте библиотеку глобализации.

Установите его

npm install globalize cldr-data --save

затем

var cldr = require("cldr-data");
var Globalize = require("globalize");

Globalize.load(cldr("supplemental/likelySubtags"));
Globalize.load(cldr("supplemental/numberingSystems"));
Globalize.load(cldr("supplemental/currencyData"));

//replace 'hi' with appropriate language tag
Globalize.load(cldr("main/hi/numbers"));
Globalize.load(cldr("main/hi/currencies"));

//You may replace the above locale-specific loads with the following line,
// which will load every type of CLDR language data for every available locale
// and may consume several hundred megs of memory!
//Use with caution.
//Globalize.load(cldr.all());

//Set the locale
//We use the extention u-nu-native to indicate that Devanagari and
// not Latin numerals should be used.
// '-u' means extension
// '-nu' means number
// '-native' means use native script
//Without -u-nu-native this example will not work
//See 
// https://en.wikipedia.org/wiki/IETF_language_tag#Extension_U_.28Unicode_Locale.29
// for more details on the U language code extension 
var hindiGlobalizer = Globalize('hi-IN-u-nu-native');

var parseHindiNumber = hindiGlobalizer.numberParser();
var formatHindiNumber = hindiGlobalizer.numberFormatter();
var formatRupeeCurrency = hindiGlobalizer.currencyFormatter("INR");

console.log(parseHindiNumber('३,५००')); //3500
console.log(formatHindiNumber(3500));   //३,५००
console.log(formatRupeeCurrency(3500)); //₹३,५००.००

https://github.com/codebling/globalize-example

Ответ 5

var number = 3500;

var toLocaleString = number.toLocaleString("hi-IN")

var formatted = toLocaleString.replace(',','')

var converted = parseInt(formatted)

Ответ 6

Связанный ответ, но если вы хотите запустить очистку ввода значений пользователем в форму, вот что вы можете сделать:

const numFormatter = new Intl.NumberFormat('en-US', {
  style: "decimal",
  maximumFractionDigits: 2
})

// Good Inputs
parseFloat(numFormatter.format('1234').replace(/,/g,"")) // 1234
parseFloat(numFormatter.format('123').replace(/,/g,"")) // 123

// 3rd decimal place rounds to nearest
parseFloat(numFormatter.format('1234.233').replace(/,/g,"")); // 1234.23
parseFloat(numFormatter.format('1234.239').replace(/,/g,"")); // 1234.24

// Bad Inputs
parseFloat(numFormatter.format('1234.233a').replace(/,/g,"")); // NaN
parseFloat(numFormatter.format('$1234.23').replace(/,/g,"")); // NaN

// Edge Cases
parseFloat(numFormatter.format(true).replace(/,/g,"")) // 1
parseFloat(numFormatter.format(false).replace(/,/g,"")) // 0
parseFloat(numFormatter.format(NaN).replace(/,/g,"")) // NaN

Используйте международную дату по местному времени через format. Это очищает любые неверные данные, если они есть, возвращает строку NaN, которую вы можете проверить. В настоящее время нет способа удалить запятые как часть локали (по состоянию на 10.12.19), поэтому вы можете использовать команду regex для удаления запятых с помощью replace.

ParseFloat преобразует определение этого типа из строки в число

Если вы используете React, ваша функция вычисления может выглядеть следующим образом:

updateCalculationInput = (e) => {
    let value;
    value = numFormatter.format(e.target.value); // 123,456.78 - 3rd decimal rounds to nearest number as expected
    if(value === 'NaN') return; // locale returns string of NaN if fail
    value = value.replace(/,/g, ""); // remove commas
    value = parseFloat(value); // now parse to float should always be clean input

    // Do the actual math and setState calls here
}