1

If I do:

var number = 35000.25; alert(number.toLocaleString("de-DE")); I will get 35.000,25 in German.

But how can I convert it back to 35000.25 or I want something like:

var str='35.000,25'; alert(str.toLocaleNumber("en-US")); So, that it can give 35,000.25.

Is it possible by JS?

niclas_4
  • 3,514
  • 1
  • 18
  • 49
Srinivasan G
  • 35
  • 1
  • 5

2 Answers2

5

The following function will first construct a NumberFormat based on the given locale. Then it will try to find the decimal separator for that language.

Finally it will replace all but the decimal separator in the given string, then replace the locale-dependant separator with the default dot and convert it into a number.

function convertNumber(num, locale) {
  const { format } = new Intl.NumberFormat(locale);
  const [, decimalSign] = /^0(.)1$/.exec(format(0.1));
  return +num
    .replace(new RegExp(`[^${decimalSign}\\d]`, 'g'), '')
    .replace(decimalSign, '.');
}

// convertNumber('100,45', 'de-DE')
// -> 100.45

Keep in mind that this is just a quick proof of concept and might / will fail with more exotic locales that do not follow the assumptions made here (e.g. left-to-right, no weird number insertions, no whitespace, no signs etc.).

You can however adapt this...

Jonathan
  • 3,614
  • 3
  • 21
  • 30
1

I know this is a bit late, but future readers may find this helpful. My team and I had the exact same problem a couple of months ago, where we needed to convert strings to numbers in more "exotic" locales, such as Indian, in a generic way. So, we've created a basic Javascript library that does exactly that and open-sourced it. It's called locale-to-number.js and you can find it here: https://github.com/fromScratchStudioGr/locale-to-number.js.

It, currently, supports most of the available locales, while the rest of them are about to be implemented as well.

Cheers!