有没有办法将 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 美元