Как взять число вроде 10000
и вывести его как $10,000.00
?
У меня даже была проблема с String.format(...)
с ошибкой Not a function
.
Я следил за многочисленными статьями, все они были неполными и ни одна не работала. Мне не нужна полная интернационализация, просто возможность форматировать число
Вы можете использовать метод 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 работает нормально. Пробуете Run code snippet
? В моем случае это печатает $2,665.00
на React Native печатается 1665. Может быть проблема с движком React Native.
Валюта не всегда стоит перед значением, это зависит от языка
@ofer2980, тогда почему бы не изменить то, что вы хотите? Это очень просто, вам нужна валюта в последнюю очередь — добавьте ее в последнюю очередь.
Да, но это зависит от языка — как вы можете сказать, откуда он приходит для каждого языка? Я считаю, что использование Intl.NumberFormatter, который получает локаль в качестве входных данных, является лучшим решением.
8364
не работает за €
@Мо. Это работает, я проверил с 8364
. Это фрагмент js, поэтому он должен работать для любого числа. Пожалуйста, проверьте свой код ?
@Робин исправил new Intl.NumberFormat('en-GB', {
. В любом случае спасибо за ответ
Вы можете использовать эту библиотеку числовой формат реакции. Он имеет эти функции
Пример использования
<NumberFormat value = {2456981} displayType = {'text'} thousandSeparator = {true} prefix = {'$'} />
Результат: 2 456 981 долларов США.
да, я нашел это позже в тот же день, спасибо .. ты не думал, что для этого потребуется целый компонент.
Не забудьте добавить: renderText = {value => <Text>{value}</Text>} внутри реквизита <NumberFormat.
@mikebertian Не могли бы вы написать полный синтаксис. Это было бы большим подспорьем.
Этот компонент не поддерживает нативные реакции, вот в чем вопрос.
Мои данные также имели такие значения, как 20,1, и я хотел получить от этого 20,10 долларов, поэтому я объединил и это, и ответ @robin: <NumberFormat renderText = {text => <Text>{text}</Text>} value = {props.data .amount.toFixed(2)} displayType = {'text'} тысячный разделитель = {true} prefix = {'$'} />
Можем ли мы сделать префикс динамическим значением?
Число((12331.2313).toFixed(2)).toLocaleString()
Худшая библиотека, которую я когда-либо видел. Код полон обходных путей, а проект мертв или умрет в следующем году.
это не пакет React Native!!
может быть достигнуто, как показано ниже, и вы также можете удалить конечный 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.
Кому-нибудь удалось сделать эту работу в React Native?
@AsadS /** * Предпочтительный вариант сборки JavaScriptCore. * * Например, чтобы использовать международный вариант, вы можете использовать: * def jscFlavor = 'org.webkit:android-jsc-intl:+'
* * Международный вариант включает библиотеку ICU i18n и необходимые данные, * позволяющие использовать, например. Date.toLocaleString
и String.localeCompare
, которые * дают правильные результаты при использовании с локалями, отличными от en-US. Обратите внимание, что * этот вариант примерно на 6 МБ больше для каждой архитектуры, чем по умолчанию. */
Самый быстрый способ — использовать формат числа-реакции, как указано выше, но не забывайте о реквизите renderText
, чтобы React Native не выдавал ошибку рендеринга.
Выполните этот шаг:
npm i react-number-format
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 вам нужно добавить import React from "react";
в начало кода.
Чтобы избежать использования библиотек, вы можете использовать следующий код
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}`
}
В каком формате вы хотите?