有没有办法将 1.00M 转换为 1,000,000?

Posted

技术标签:

【中文标题】有没有办法将 1.00M 转换为 1,000,000?【英文标题】:Is there a way to convert 1.00M to 1,000,000? 【发布时间】:2020-08-26 16:19:32 【问题描述】:

我用谷歌搜索了很多,但根据我的查询,我找不到任何有用的功能。

我想要的是:

1.2K       ->  1,200
304.0M     ->  304,000,000
987.654B   ->  987,654,000,000

有什么方法可以将带有后缀(K - 千、M - 百万、B - 十亿)的数字转换为原始双精度数?我只找到了向另一个方向转换的解决方案。

【问题讨论】:

dplyr 标签重要吗...? 这里有一些其他可能有用的例子:this & this。 【参考方案1】:
string_vec <- c("1.2K", "304.0M", "987.654B", "1.78")

conv_df <- data.frame(
  symbol = c("", "K", "M", "B"),
  value = c(1, 1000, 1000000, 1000000000)
)

convert <- function(string_vec)
  
  data.frame(
    string_value = parse_number(string_vec),
    symbol = string_vec %>% str_sub(start = -1) %>% str_remove("[0-9]") 
  ) %>%
    left_join(conv_df, by = "symbol") %>%
    mutate(true_value = string_value * value) %>%
    pluck("true_value")


convert(string_vec)

【讨论】:

由于您使用的是 tidyverse,您可以使用 readr::parse_number(string_vec) 获取 string_value @Ben tnx 很高兴知道它允许我优雅地添加“无符号”【参考方案2】:

某处可能已经存在某些东西,但我懒得检查...

suffs <- c(K=1e3, M=1e6, B=1e9)
conv <- function(x) 
    nc <- nchar(x)
    suff <- substr(x,nc,nc) ## select last char
    suffval <- suffs[suff]  ## find corresponding numeric value
    num <- as.numeric(substr(x,1,nc-1))  ## select all but last char
    num*suffval

conv(c("1.2K","304.0M","987.654B"))

这不会对坏后缀、没有后缀的数字等进行任何检查。

【讨论】:

以上是关于有没有办法将 1.00M 转换为 1,000,000?的主要内容,如果未能解决你的问题,请参考以下文章

Laravel 中的货币格式 - 100 到 1.00 美元

基金押题卷三

C#中的指数函数

单片机 C语言 从AD得到一个8位二进制数 0x00~0xff 想把它换算成小数显示 0.00~1.00

是否有用于转换非标准科学记数法的 R 函数?

有没有办法将 mm:ss.00 转换为 seconds.00?