Как вы форматируете число в валюту при использовании React native Expo?

Как взять число вроде 10000 и вывести его как $10,000.00? У меня даже была проблема с String.format(...) с ошибкой Not a function.

Я следил за многочисленными статьями, все они были неполными и ни одна не работала. Мне не нужна полная интернационализация, просто возможность форматировать число

В каком формате вы хотите?

Masuk Helal Anik 07.04.2019 08:34
Умерло ли Create-React-App?
Умерло ли Create-React-App?
В этом документальном фильме React.dev мы исследуем, мертв ли Create React App (CRA) и какое будущее ждет этот популярный фреймворк React.
Освоение React Native: Пошаговое руководство для начинающих
Освоение React Native: Пошаговое руководство для начинающих
React Native - это популярный фреймворк с открытым исходным кодом, используемый для разработки мобильных приложений. Он был разработан компанией...
В чем разница между react native и react ?
В чем разница между react native и react ?
React и React Native - два популярных фреймворка для создания пользовательских интерфейсов, но они предназначены для разных платформ. React - это...
От React к React Native: Руководство для начинающих по разработке мобильных приложений с использованием React
От React к React Native: Руководство для начинающих по разработке мобильных приложений с использованием React
Если вы уже умеете работать с React, создание мобильных приложений для iOS и Android - это новое приключение, в котором вы сможете применить свои...
Хуки React: что это такое и как их использовать
Хуки React: что это такое и как их использовать
Хуки React - это мощная функция библиотеки React, которая позволяет разработчикам использовать состояние и другие возможности React без написания...
49
1
102 044
6
Перейти к ответу Данный вопрос помечен как решенный

Ответы 6

Вы можете использовать метод toFixed для отображения 2 десятичных знаков.

let num = 1000; 
console.info(num.toFixed(2)); // 1000.00

И вы можете использовать Regex следующим образом

function currencyFormat(num) {
   return '$' + num.toFixed(2).replace(/(\d)(?=(\d{3})+(?!\d))/g, '$1,')
}
console.info(currencyFormat(2665)); // $2,665.00

Второй способ не работает. Он печатает 1665, а не 2665.

romin21 06.04.2020 14:04

@ romin21 работает нормально. Пробуете Run code snippet? В моем случае это печатает $2,665.00

Robin 07.04.2020 04:51

на React Native печатается 1665. Может быть проблема с движком React Native.

romin21 07.04.2020 11:19

Валюта не всегда стоит перед значением, это зависит от языка

ofer2980 02.09.2020 09:48

@ofer2980, тогда почему бы не изменить то, что вы хотите? Это очень просто, вам нужна валюта в последнюю очередь — добавьте ее в последнюю очередь.

Robin 02.09.2020 12:09

Да, но это зависит от языка — как вы можете сказать, откуда он приходит для каждого языка? Я считаю, что использование Intl.NumberFormatter, который получает локаль в качестве входных данных, является лучшим решением.

ofer2980 02.09.2020 23:49
8364не работает за €
Mo. 12.01.2022 12:51

@Мо. Это работает, я проверил с 8364. Это фрагмент js, поэтому он должен работать для любого числа. Пожалуйста, проверьте свой код ?

Robin 13.01.2022 17:34

@Робин исправил new Intl.NumberFormat('en-GB', {. В любом случае спасибо за ответ

Mo. 13.01.2022 17:58
Ответ принят как подходящий

Вы можете использовать эту библиотеку числовой формат реакции. Он имеет эти функции

  1. Префикс, суффикс и разделитель тысяч.
  2. Пользовательский шаблон формата.
  3. Маскировка.
  4. Пользовательский обработчик форматирования.
  5. Формат числа во входе или форматировать как простой текст

Пример использования

<NumberFormat value = {2456981} displayType = {'text'} thousandSeparator = {true} prefix = {'$'} />

Результат: 2 456 981 долларов США.

да, я нашел это позже в тот же день, спасибо .. ты не думал, что для этого потребуется целый компонент.

Choco 09.04.2019 07:34

Не забудьте добавить: renderText = {value => <Text>{value}</Text>} внутри реквизита <NumberFormat.

mikebertiean 23.05.2019 22:56

@mikebertian Не могли бы вы написать полный синтаксис. Это было бы большим подспорьем.

kb920 01.10.2019 04:45

Этот компонент не поддерживает нативные реакции, вот в чем вопрос.

Anish 31.10.2019 04:47

Мои данные также имели такие значения, как 20,1, и я хотел получить от этого 20,10 долларов, поэтому я объединил и это, и ответ @robin: <NumberFormat renderText = {text => <Text>{text}</Text>} value = {props.data .amount.toFixed(2)} displayType = {'text'} тысячный разделитель = {true} prefix = {'$'} />

Jeff 11.02.2020 22:33

Можем ли мы сделать префикс динамическим значением?

SVK 11.05.2020 08:58

Число((12331.2313).toFixed(2)).toLocaleString()

sandeep talabathula 04.07.2020 17:50

Худшая библиотека, которую я когда-либо видел. Код полон обходных путей, а проект мертв или умрет в следующем году.

puchu 01.12.2020 18:46

это не пакет React Native!!

Mojtaba Darzi 10.03.2021 12:47

может быть достигнуто, как показано ниже, и вы также можете удалить конечный 00 в конце, если нет десятичных знаков

      costing= () => {
        const cost= 1478.90 + 940;
        return parseFloat(cost).toFixed(2).replace(/(\d)(?=(\d{3})+(?!\d))/g, '$1,');
      }

Обновлено: извините, это решение React.js, а не React Native. Ничто из вышеперечисленного не сработало для меня ... но у этого парня была правильная идея / решение https://medium.com/@nidhinkumar/react-js-number-format-and-styling-a1a6e211e629

const numberFormat = (value) =>
  new Intl.NumberFormat('en-IN', {
    style: 'currency',
    currency: 'INR'
  }).format(value);

numberFormat(50000); //output as ₹ 50,000.00
numberFormat(10000); //output as ₹ 10,000.00

Можете ли вы убедиться, что это решение работает в Android? В прошлый раз, когда я использовал React Native, объект «Intl» вызывал сбой в моей версии Android.

Asad S 19.06.2020 05:47

Кому-нибудь удалось сделать эту работу в React Native?

Nathileo 11.08.2020 15:48

@AsadS /** * Предпочтительный вариант сборки JavaScriptCore. * * Например, чтобы использовать международный вариант, вы можете использовать: * def jscFlavor = 'org.webkit:android-jsc-intl:+' * * Международный вариант включает библиотеку ICU i18n и необходимые данные, * позволяющие использовать, например. Date.toLocaleString и String.localeCompare, которые * дают правильные результаты при использовании с локалями, отличными от en-US. Обратите внимание, что * этот вариант примерно на 6 МБ больше для каждой архитектуры, чем по умолчанию. */

Diego Molina 28.09.2020 21:44

Самый быстрый способ — использовать формат числа-реакции, как указано выше, но не забывайте о реквизите renderText, чтобы React Native не выдавал ошибку рендеринга.

Выполните этот шаг:

  1. Установить. Используйте эту команду:
npm i react-number-format
  1. Используйте его в своем приложении React Native следующим образом:
import React from 'react';
import NumberFormat from 'react-number-format';

export function ReactNativeNumberFormat({ value }) {
  return (
    <NumberFormat
      value = {value}
      displayType = {'text'}
      thousandSeparator = {true}
      prefix = {'$'}
      renderText = {formattedValue => <Text>{formattedValue}</Text>} // <--- Don't forget this!
    />
  );
}

Это работает хорошо. Как видите, в итоге я создал свой пользовательский компонент, который принимает value в качестве реквизита, поэтому я могу использовать его везде, где мне это нужно. Именно так:

  <View>
    <ReactNativeNumberFormat value = {530000} />
  </View>

Надежда может быть полезной.

PS: Это моя ссылка => https://github.com/s-yadav/react-number-format/issues/17#issuecomment-395187806.

Не могу найти переменную React

Takkie253 17.06.2021 13:51

@ Takkie253 вам нужно добавить import React from "react"; в начало кода.

Asad S 18.06.2021 09:27

Чтобы избежать использования библиотек, вы можете использовать следующий код

const defaultOptions = {
  significantDigits: 2,
  thousandsSeparator: ',',
  decimalSeparator: '.',
  symbol: '$'
}

const currencyFormatter = (value, options) => {
  if (typeof value !== 'number') value = 0.0
  options = { ...defaultOptions, ...options }
  value = value.toFixed(options.significantDigits)

  const [currency, decimal] = value.split('.')
  return `${options.symbol} ${currency.replace(
    /\B(?=(\d{3})+(?!\d))/g,
    options.thousandsSeparator
  )}${options.decimalSeparator}${decimal}`
}

Другие вопросы по теме