Правильно форматировать отрицательные значения валюты со знаком минус перед знаком доллара

#r #formatting #currency

#r #форматирование #Валюта

Вопрос:

Я хочу правильно форматировать отрицательные значения валюты со знаком минус перед знаком доллара.

Следующий код помещает знак минуса после знака доллара, то есть -100 долларов

 library(scales)
dollar(-100)
  

Как бы вы изменили это на желаемый результат, т.е. — 100 долларов?
Я не вижу очевидного варианта в документации
https://rdrr.io/cran/scales/man/dollar_format.html

Комментарии:

1.Вот вариант с sprintf из другого источника для фиксации местоположения отрицательного знака, но тогда мне нужно иметь дело с запятыми в качестве разделителей тысяч и настроить, нужны ли мне центы, что я уже делаю с весами, поэтому, если весы могут делать то, что требуется, я бы предпочел не добавлять сложностидругого подхода. x <- c(0.01,-0.01, 100000, -100) ifelse(x>0, sprintf("$%4.2f", x), sprintf("-$%4.2f", abs(x)))

Ответ №1:

Поскольку вывод dollar() является символьным вектором, вы можете определить новую функцию, используя chartr результаты для условной замены символов и использования ... для передачи дополнительных аргументов исходной функции.

 library(scales)

newdollar <- function(x, ...) ifelse(x < 0, chartr("$-", "-$", dollar(x, ...)), dollar(x, ...))
newdollar(c(5, -5), suffix = "!!" )

[1] "$5!!"  "-$5!!"
  

Комментарии:

1. Очень приятно! И для вашего среднего Джо вы можете просто поместить свои параметры в функцию, например, целые доллары … dollaronly <- function(x) ifelse(x < 0, chartr("$-", "-$", dollar(x, accuracy = 1)), dollar(x, accuracy = 1)) против долларов и центов… cents <- function(x) ifelse(x < 0, chartr("$-", "-$", dollar(x, accuracy = 0.01)), dollar(x, accuracy = 0.01))

Ответ №2:

Один из хитрых способов — явно добавить знак «-» к абсолютному значению amount , если amount оно меньше 0.

 library(scales)
amount <- c(100, -200, -50)
ifelse(amount < 0, paste0("-", dollar(abs(amount))), dollar(amount))
#[1] "$100"  "-$200" "-$50"