How to get the same number of char as number of decimals using num2str?

조회 수: 7 (최근 30일)
Dear all,
I want to get the decimal part of a number.
I have written this small function:
function dec = get_decimals(input)
str = num2str(input) % convert to string
index = strfind(str,'.'); % locate the comma/point
dec = str2double(str(index+1:end)); % take the end
end
However if my input has too many decimals, the function will truncate my number:
>> dec = get_decimals(3.141592653)
str =
'3.1416'
decimals =
1416
How to solve it?
Thanks in advance.
Best,
louis

채택된 답변

Bruno Luong
Bruno Luong 2022년 9월 16일
input = pi
input = 3.1416
str = num2str(input,16)
str = '3.141592653589793'
  댓글 수: 1
Louis Tomczyk
Louis Tomczyk 2022년 9월 16일
Ok thanks a lot, below a function I suggest:
function dec = get_decimals(varargin)
% ---------------------------------------------
% ----- INFORMATIONS -----
% Function name : GET_DECIMALS
% Author : louis tomczyk
% Institution : Telecom Paris
% Email : louis.tomczyk.work@gmail.com
% Date : 2022-09-16
% Version : 1.0
%
% ----- MAIN IDEA -----
% Return the decimal part of a given input.
%
% ----- INPUTS -----
% VARARGIN{1} the number from which we want the decimals
% VARARGIN{2} the number of decimals wanted [OPTIONAL]
%
% ----- BIBLIOGRAPHY -----
% Functions :
% Author :
% Author contact :
% Date :
% Title of program :
% Code version :
% Type :
% Web Address :
% -----------------------
% Articles
% Author :
% Title :
% Jounal :
% Volume - N° :
% Date :
% DOI :
% ---------------------------------------------
input = varargin{1};
% conversion to string
if nargin == 1
str = num2str(input);
else
str = num2str(input,varargin{2});
end
% locating the decimals
index = strfind(str,'.');
% getting the decimals
dec = str2double(str(index+1:end));
% if no decimals
if isnan(dec)
dec = [];
end
end
Best,

댓글을 달려면 로그인하십시오.

추가 답변 (1개)

James Tursa
James Tursa 2022년 9월 16일
You might look into using the fix( ) function to isolate the fractional part of your number and then work with that directly.
  댓글 수: 7
James Tursa
James Tursa 2022년 9월 16일
편집: James Tursa 2022년 9월 16일
@Louis Tomczyk As you have just learned, it is best to post your real problem up front so as to avoid answers that don't really help you. In addition to Bruno's latest comment, here are other methods for determining if a finite number is an integer value:
x==fix(x)
x==floor(x)
x==round(x)
Louis Tomczyk
Louis Tomczyk 2022년 9월 17일
I know it, but usually I like to try things my own way, not getting directly answer which will surely be much more efficient.
I like to see the reasoning process suggested by others to get the best of this sharing experience.
Thanks again anyway to both of you.
Best,
louis

댓글을 달려면 로그인하십시오.

카테고리

Help CenterFile Exchange에서 Function Creation에 대해 자세히 알아보기

제품


릴리스

R2021a

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!

Translated by