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

5 ビュー (過去 30 日間)
Louis Tomczyk
Louis Tomczyk 2022 年 9 月 16 日
コメント済み: Louis Tomczyk 2022 年 9 月 17 日
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 Center および File ExchangeLoops and Conditional Statements についてさらに検索

製品


リリース

R2021a

Community Treasure Hunt

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

Start Hunting!

Translated by