2

번호가 a = 3.860575156847749e+003;이며 일반 방식으로 표시합니다. 그래서 나는 b = sprintf('%0.1f' a);이라고 씁니다. b을 인쇄하면 3860.6이 나옵니다. 이것은 완벽 해. 사실, a은 double 유형 인 반면 b은 char 형식으로 변환되었습니다.포맷 번호 원하는대로 번호

올바른 형식으로 할 수 있으며 최종 결과로 여전히 숫자가 있습니까?

감사합니다.

답변

5

글쎄, 당신은 수치 (컴퓨터의 메모리에 저장된 번호)와 진수 표현 (둘 사이에 당신이에 표시되는 문자열/문자 배열을 구별 할 필요가 당신의 화면). 숫자에 형식을 부과 할 수는 없습니다. 숫자는 다양한 방법으로 문자열로 표시 할 수있는 값을가집니다 (예 : 1234 = 1.234e3 = 12.34e2 = 0.1234e4 = ...).

정확도가 떨어지는 숫자를 저장하려면 round, floor, ceil을 사용하여 원래 숫자보다 정밀도가 낮은 숫자를 계산할 수 있습니다. 예.

a = 3.860575156847749e+003; 
p = 0.1; % absolute precision you want 
b = p .* round(a./p) 

이 다른 방법으로 표현 될 수있는 변수 b = 3.8606e3를 얻을 것이다, 그러나 (0을 포함해야한다 : 당신이 a = 3.860575156847749e+003이 있고 5 개 유효 숫자가있는 번호를 원하는 경우, 당신은 round를 사용하여 수행 할 수 있습니다 실제로 : 아주 작은 값은 때로는 피할 수없는 경우가 있습니다). 나는 그것이 실제로 당신이 원하는 것이라고 생각하지만,이 숫자는 3.86060000과 같습니다 (동일한 값의 또 다른 문자열 표현 임). 따라서 10 진수 표현이 다음과 같이 설정되지 않았 음을 다시 한번 강조하고 싶습니다. 숫자를 반올림하지만 double을 문자열로 변환하는 함수를 암시 적으로 호출하여 sprintf, disp 또는 일부 다른 함수로 발생합니다.