如果我这样做:
var number = 3500;
alert(number.toLocaleString("hi-IN"));
我会用印地语获得३,५००
。
但是如何将其转换回3500
。
我想要这样的东西:
var str='३,५००';
alert(str.toLocaleNumber("en-US"));
所以,它可以提供3500
。
是否可以通过javascript,jquery或任何其他免费库?
答案 0 :(得分:5)
我认为你正在寻找类似的东西:
https://github.com/jquery/globalize
以上链接将带您进入git项目页面。这是由Microsoft提供的js库。 你应该尝试一下,尝试使用该插件的formt方法。如果你想学习这个插件,这里有相同的链接:
http://weblogs.asp.net/scottgu/jquery-globalization-plugin-from-microsoft
我希望这是您正在寻找的,并将尽快解决您的问题。如果它不起作用,请告诉我。
答案 1 :(得分:1)
不幸的是,您必须手动处理本地化。受this answer的启发,我创建了一个手动替换印地语数字的函数:
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("३५००"));
答案 2 :(得分:1)
你可以尝试一下
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');
我是从here得到的 如果您需要jquery,请try this link
答案 3 :(得分:1)
安装
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)); //₹३,५००.००
答案 4 :(得分:0)
var number = 3500;
var toLocaleString = number.toLocaleString("hi-IN")
var formatted = toLocaleString.replace(',','')
var converted = parseInt(formatted)
答案 5 :(得分:0)
最近,我一直在同一个问题,即将在任何语言环境中格式化的字符串化的数字转换回数字。
我从NG Prime InputNumber组件中实现的解决方案中得到了启发。他们使用Intl.NumberFormat.prototype.format()
(我建议)将值格式化为语言环境字符串,然后根据简单的样本创建RegExp
表达式集,以便可以从格式化的字符串中截断特定的表达式。
可以使用Intl.Numberformat.prototype.formatToParts()
简化此解决方案。此方法返回有关grouping/decimal/currency
以及用于格式化特定语言环境中的值的所有其他分隔符的信息,因此您可以轻松地从以前格式化的字符串中清除它们。这似乎是最简单的解决方案,它可以覆盖所有情况,但是您必须知道以前在哪种语言环境中格式化过该值。
为什么Ng Prime没有这样走?我认为是因为Intl.Numberformat.prototype.formatToParts()
不支持IE11,或者还有其他我没有注意到的事情。
答案 6 :(得分:0)
此问题的常见情况是向用户显示一个浮点数,然后将其作为数值返回。
在这种情况下,javascript将数字放在首位,并且在格式化显示时将其散开。一种简单的解析方法是将实际的float值与格式化的值一起存储:
var number = parseFloat(div.dataset.value);
然后通过解析data属性将其恢复:
function propToString<T>(obj?: T): T {
return new Proxy({}, {
get({}, prop) {
return prop;
}
}) as T;
}
class Foo {
bar: string;
fooBar: string;
}
console.log(propToString<Foo>().bar, propToString(new Foo()).fooBar);
// Prints: bar fooBar
// Cache the values for improved performance:
const Foo_bar = propToString<Foo>().bar;
这是哥伦布的蛋式答案。只要问题是鸡蛋,它就可以工作。