2014-07-10 4 views
3

숫자를 이하의 문자열로 변환하려는 경우, 소수점 오른쪽에 15 자리 숫자를으로 입력하십시오. 이하는입니다. 마지막 숫자가 모두 0이면 인쇄 할 수 없습니다. 예를 들어sprintf가 후행 0을 무시하는 방법

:

sprintf('%.15f', 3.0001) 

==> '3.000100000000000' 

모든 후행 숫자가 모두 0이기 때문에, 그러나 여기, 내가 선호했을 것 지금까지 너무 좋은 :

==> '3.0001' 

함께 할 수있는 간단한 방법이 있나요 sprintf 형식 지정자 또는 후행 제로를 제거하기 위해 출력을 수동으로 후 처리해야합니까?

NB : sprintf에 대한 다른 대문자가있을 경우 matlab과 함께 작업하고 있습니다.

답변

8

전자 g 대신 f 사용

sprintf('%.15g', 3.0001) 

ans = 

3.0001 

doc sprintf에서

  • %의 g 후행 제로와 F % e 또는 %의 콤팩트 형태

위의 방법은 0.0001 (1E-4), 또 다른 해결책은 %의 F를 사용하고 여기에 regexprep 그것이 공간 공백 하나 이상의 제로 대체되는 경우 :

str = sprintf('%.15f ',mat); 
str = regexprep(str,'[0]+ ',' ') 

이 방법도 갖고 이 유효 숫자가 제거 된 5e-16보다 작은 수의 문제 (소수점의 오른쪽 15 자리 숫자 만 0과 같음).

str = sprintf('%.15f ',mat); 
str=regexprep(str,'([1-9])[0]+ ','$1 ') 
3

수행

우리가 하나 이상의 제로와 공백 디지트와 공백 내지 1-9에서 자리를 바꿀 수 맹목적 대체 제로 대신이를 해결하기 위해, 너 이래?

sprintf('%.15g', 3.0001001) 
==> 3.0001001 
sprintf('%.15g', 3.0001) 
==> 3.0001 
+0

네,이 말은 내 뜻입니다 (@RTL 답은 동일합니다). 감사. – CitizenInsane

+0

사실 1 분 후에 RTL이 대답했습니다. : p 이 사이트가 한 달에 2 번만 대답하는 것이 월간 아무도없는 것이 좋습니다! –

관련 문제