2014-04-18 5 views
7

해결 방법은 상당히 쉬운 문제인 것처럼 보이지만 답변을 찾는 데 어려움이 있습니다.소수점 이하 자릿수를 지정된 자릿수로 자르십시오.

나는 긴 소수점을 포함하는 벡터를 가지고 있으며 소수점 이하의 특정 숫자로 자릅니다. 나는 그것을 반올림하기를 원하지 않지만, 오히려 원하는 소수점 이하의 값을 제거하십시오.

예를 들어, 소수 자릿수 4 자리를 원하면 0.123456789에서 0.1234를 반환하고 싶습니다. 이것은 특정 자릿수를 인쇄하는 것이 아니라 주어진 값으로 잘린 원래 값을 반환하는 것입니다.

감사합니다.

+2

를 파일에 쓰기 사용하기 전에 숫자를 문자열로 변환하는 plyr :: round_any (0.1234567, 정확성을 기억 = .0001, f = floor)' –

답변

13

은 예상과 같이 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 
+0

하지만 : 'trunc (1234567.2, prec = 5)'는 1234567을 제공합니다. "1234567.2"를 원하지 않습니까? –

0

아니 가장 우아한 방법으로 만 작동합니다.

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)) 
0

위의 기술을 오랫동안 사용했습니다. 어느 날 나는 텍스트 파일로 결과를 복사 한 몇 가지 문제가 있었다 나는 이런 식으로 내 문제 해결 : 자사에 필요한 파일 수에 쓸 때

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) 
관련 문제