這看起來應該是一個相當容易解決的問題,但我在查找答案時遇到了一些問題。將小數截斷爲指定位置
我有一個向量,其中包含長小數,我想截斷它到一個特定的小數位數。我不想整理它,而只是刪除超出我想要的小數位數的值。
例如,我希望0.123456789返回0.1234,如果我想要4位十進制數字。這不是打印特定數字位數的問題,而是將原始值截斷爲給定數字。
謝謝。
這看起來應該是一個相當容易解決的問題,但我在查找答案時遇到了一些問題。將小數截斷爲指定位置
我有一個向量,其中包含長小數,我想截斷它到一個特定的小數位數。我不想整理它,而只是刪除超出我想要的小數位數的值。
例如,我希望0.123456789返回0.1234,如果我想要4位十進制數字。這不是打印特定數字位數的問題,而是將原始值截斷爲給定數字。
謝謝。
trunc(x*10^4)/10^4
收益率0.1234
像預期的那樣。
更一般地,
trunc <- function(x, ..., prec = 0) base::trunc(x * 10^prec, ...)/10^prec;
print(trunc(0.123456789, prec = 4) # 0.1234
print(trunc(14035, prec = -2), # 14000
但是: 'trunc(1234567.2,prec = 5)'給出1234567.我們不想要「1234567.2」嗎? –
不是最優雅的方式,但它會工作。
string_it<-sprintf("%06.9f", old_numbers)
pos_list<-gregexpr(pattern="\\.", string_it)
pos<-unlist(lapply(pos_list, '[[', 1)) # This returns a vector with the first
#elements
#you're probably going to have to play around with the pos- numbers here
new_number<-as.numeric(substring(string_it, pos-1,pos+4))
我長時間使用了上述工藝。有一天,我有,當我的結果複製到一個文本文件中的一些問題,我解決我這樣的問題:
trunc_number_n_decimals <- function(numberToTrunc, nDecimals){
splitNumber <- strsplit(x=format(numberToTrunc, digits=20, format=f), split="\\.")[[1]]
decimalPartTrunc <- substr(x=splitNumber[2], start=1, stop=nDecimals)
truncatedNumber <- as.numeric(paste0(splitNumber[1], ".", decimalPartTrunc))
return(truncatedNumber)
}
print(trunc_number_n_decimals(9.1762034354551236, 6), digits=14)
[1] 9.176203
print(trunc_number_n_decimals(9.1762034354551236, 7), digits=14)
[1] 9.1762034
print(trunc_number_n_decimals(9.1762034354551236, 8), digits=14)
[1] 9.17620343
print(trunc_number_n_decimals(9.1762034354551236, 9), digits=14)
[1] 9.176203435
這種解決方案的情況下非常方便,必要時其寫入文件與號碼許多小數,如16 只記得寫入文件,使用格式()
numberToWrite <- format(trunc_number_n_decimals(9.1762034354551236, 9), digits=20)
對於預包裝的功能之前,將數字轉換爲字符串,嘗試'plyr :: round_any(0.1234567,精度= .0001,f = floor)' –