Форматирование числа в качестве валюты с использованием CSS - PullRequest
30 голосов
/ 21 февраля 2012

Просто интересно, кто-нибудь знает, возможно ли отформатировать содержимое элемента в виде валюты, используя только CSS.Было бы неплохо иметь представление о том, как значение представлено в CSS, если это возможно, но ничего не могу найти, поэтому я не задерживаю дыхание:)

<!DOCTYPE html>
<html>
<head>
    <style type="text/css">
        .dollars:before { content:'$'; }
    </style>
</head>
<body>
    Pure CSS: <span class="dollars">25153.3</span>
    <br />
    Ideal format: <span>$25,153.30</span>
</body>
</html>

Этот пример выглядит так:

Чистый CSS: 25153,3 $

Идеальный формат: 25 153,30 $

Также я знаю, что использовать javascript довольно просто - http://css -tricks.com / сниппеты / JavaScript / формат валюты / .

Ответы [ 4 ]

18 голосов
/ 12 декабря 2015

Формат валюты может быть достигнут с помощью CSS и небольшого количества Javascript, который необходим для анализа числа, чтобы добавить запятые.Класс CSS добавляет дополнительный стиль, например, отрицательный (красный) или знак валюты (т. Е. Знак доллара).Подход заключается в следующем:

1) Преобразовать значение в число (добавляет запятые в зависимости от локали)

Number(value).toLocaleString('en');

2) Добавить класс, чтобы определить, является ли оно отрицательным или положительнымзначение (т. е. красный цвет)

.enMoney::before {
    content:"$";
}
.negMoney {
    color:red;
}

Подробнее см. здесь с примером кода и css:

http://www.ozkary.com/2014/04/format-currency-with-javascript-and-css.html

0 голосов
/ 12 октября 2018

var number = 25153.3; console.log(number.toLocaleString()); / ------

var number = 25153.3;
result="$ " + number.toLocaleString(undefined, {minimumFractionDigits: 2, maximumFractionDigits: 2})
console.log(result);

console.log();
//---------------------------------------------------

// request a currency format
console.log(number.toLocaleString('us-US', { style: 'currency', currency: 'USD' }));
// → $ 251,52.30 

console.log(number.toLocaleString('de-DE', { style: 'currency', currency: 'EUR' }));
// → 25.152,30 €

// the Japanese yen doesn't use a minor unit
console.log(number.toLocaleString('ja-JP', { style: 'currency', currency: 'JPY' }))
// → ¥251,53
0 голосов
/ 02 ноября 2017

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

.currency:before{ content:'$'; }
.currency:after{ content: '.00'; }
<span class="currency">789</span>

Тогда, возможно, надоедливым решением, если вы работаете на стороне сервера, является преобразование вашего числа в обратную строку и цикл по каждому символу.Если вы действительно хотите, вы можете поместить символы в li, а css сможет выполнить необходимое форматирование следующим образом.Однако это невероятно бессмысленно, так как вы можете просто написать строку в этой точке.

.currency li:before{ content: ' ,';}
.currency li:first-child:before{ content:'$' !important; }
.currency *{ display: inline-block; }
.currency, .currency > *{ display: inline-block; }
.currency:after{ content: '.00'; }
<ul class="currency"><li>123</li><li>456</li><li>789</li></ul> 
<ul class="currency"><li>456</li><li>789</li></ul> 
<ul class="currency"><li>789</li></ul> 

Для еще более глубокого погружения в бессмысленные усилия вы можете добавить

<style> .currency:after{ content: '.00'; } </style>

над <ul>, что позволит вашему сценариюизмените десятичное значение в CSS, lol

Тем не менее, если вы захотите скрыть и использовать JavaScript, тогда CSS на самом деле может быть несколько полезен.Вы можете вывести обычный int или double (любой точности) и просто сделать JS разбить его на <li> s.

0 голосов
/ 21 февраля 2012

Если вы спрашиваете о форматировании чисел в CSS (то есть разборе числа из строки и последующем форматировании с разделителем тысяч, десятичным разделителем, фиксированным числом десятичных цифр и т. Д.), То нет, это невозможно в CSS, и это не то, для чего был разработан CSS.

Если вы хотите выполнить какое-либо форматирование, вам лучше использовать XSLT. Например:

<?xml version="1.0" encoding="ISO-8859-1"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">

    <xsl:template match="span[@class='dollars']">
        <span>
            <xsl:text>$</xsl:text>
            <xsl:value-of select="format-number(current(), '###,###.00')"/>
        </span>
    </xsl:template>

    <xsl:template match="@* | node()">
        <xsl:copy>
            <xsl:apply-templates select="@* | node()"/>
        </xsl:copy>
    </xsl:template>
</xsl:stylesheet>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...