Response-native.toLocaleString() не работает на android

Я использую .toLocaleString() для response-native для вывода моего номера. Все работают на IOS, но, похоже, не работают на Android. Это нормально или? Нужно ли использовать функцию для десятичной дроби?

введите описание изображения здесь

Ответ 1

Вы можете использовать

number.toString().replace(/\B(?=(\d{3})+(?!\d))/g, ",")

Ответ 2

Причиной этого является очень старая версия JavaScriptCore, используемая реагирующим. iOS встраивает собственную версию, поэтому там работает нормально.

Проблема все еще существует (некоторые читают о том, куда она направляется https://github.com/facebook/react-native/issues/19737)

И дополнительную информацию об этом от разработчиков Airbnb https://medium.com/airbnb-engineering/react-native-at-airbnb-the-technology-dafd0b43838 (поиск по "несоответствиям JavaScriptCore")

Ответ 3

Вы также можете использовать Intl.NumberFormat следующим образом:

new Intl.NumberFormat('en-US', { style: 'currency', currency: 'USD' }).format(amount)

Ответ 4

Легко исправить, 30 секунд: используйте этот полифилл.

Ответ 5

Эта проблема связана с ядром Javascript, используемым для запуска реакции native в Android, а не с самой реакцией native. Чтобы преодолеть это, вам нужно будет интегрировать новейшее ядро javascript в вашу сборку Android или обновить свою собственную версию до 0.59.

Подробности задокументированы в репозитории ЗАО "Android Build".

Теперь для людей, которые хотели бы выполнять форматирование строки локали без необходимости интегрировать все ядро javascript, Javascript имеет API Интернационализации, который позволяет форматировать числа в формат, чувствительный к языку. Документация доступна на MDN

Этот API недоступен в Android и должен быть заполнен с помощью Intl

В корне вашего проекта установите библиотеку Intl

yarn add intl

А затем в индексном файле вашего проекта (index.js) добавьте следующий код вверху файла:

if(Platform.OS === 'android') { // only android needs polyfill
  require('intl'); // import intl object
  require('intl/locale-data/jsonp/en-IN'); // load the required locale details
}

Выполнив два вышеуказанных шага, вы можете получить строку локали в любом месте вашего проекта, используя

new Intl.NumberFormat('en-IN', { style: 'currency', currency: 'INR' }).format(10000000);

Если вам нужно отформатировать число для другого кода локали, все подробности кода локали доступны в intl/locale-data/jsonp/. Просто потребуйте те, которые вам нужны, в вашем файле index.js.