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

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

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

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

4b9b3361

Ответ 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.