【问题标题】:Format negative currency values correctly with minus sign before the dollar sign在美元符号之前使用减号正确格式化负货币值
【发布时间】:2019-04-11 00:22:29
【问题描述】:

我想在美元符号之前使用减号正确格式化负货币值。

以下代码将减号放在美元符号之后,即 $-100

library(scales)
dollar(-100)

如何将其更改为所需的输出,即 -$100? 我在文档中没有看到明显的选项 https://rdrr.io/cran/scales/man/dollar_format.html

【问题讨论】:

  • 这是另一个来源的 sprintf 选项,用于修复负号的位置,但是我需要将逗号作为千位分隔符处理,并调整是否需要美分,我已经这样做了秤,所以如果秤可以做需要的事情,我宁愿不增加不同方法的复杂性。 x <- c(0.01,-0.01, 100000, -100)ifelse(x>0, sprintf("$%4.2f", x), sprintf("-$%4.2f", abs(x)))

标签: r formatting currency


【解决方案1】:

由于dollar() 的输出是一个字符向量,您可以在结果上使用chartr 定义一个新函数以有条件地交换字符并使用... 将额外参数传递给原始函数。

library(scales)

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

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

【讨论】:

  • 非常好!对于您的普通乔,您可能只想将您的选项放在函数中,例如,整美元...dollaronly &lt;- function(x) ifelse(x &lt; 0, chartr("$-", "-$", dollar(x, accuracy = 1)), dollar(x, accuracy = 1)) 与美元和美分...cents &lt;- function(x) ifelse(x &lt; 0, chartr("$-", "-$", dollar(x, accuracy = 0.01)), dollar(x, accuracy = 0.01))
【解决方案2】:

如果 amount 小于 0,则一个 hacky 方法是在 amount 的绝对值上显式添加一个“-”符号。

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2018-03-29
    • 2022-01-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-01-29
    • 2011-01-04
    • 1970-01-01
    相关资源
    最近更新 更多