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