Filter löschen
Filter löschen

Function to chop a decimal to a variable number of digits

40 Ansichten (letzte 30 Tage)
I wrote the following function to approximate a number using chopping arithmetic.
chop(5,4.333352312)
function output = chop(numdigits,float)
y = floor(log10(float)+1); %number of digits in the integer part
x = fix(numdigits - y);
fprintf("%.xf",float)
end
The function is meant to approximate a float using numdigits chopping arithmetic. Since that is a variable, the number of digits after the decimal point is unknown. The output in the above example should be 4.3333 but the output is 4e+00. Is there any alternate way to display a variable number of digits after the decimal point?

Akzeptierte Antwort

Stephen23
Stephen23 am 3 Okt. 2020
Bearbeitet: Stephen23 am 3 Okt. 2020
You can use an asterisk * to refer to an input of fprintf, so in your case all you need is:
fprintf("%.*f\n",x,float);
and tested:
>> chop(5,4.333352312)
4.3334
Of course if you want to return that string as an output argument you will need to use sprintf instead:
function s = chop(numdigits,float)
y = floor(log10(float)+1);
x = fix(numdigits - y);
s = sprintf("%.*f",x,float);
end

Weitere Antworten (1)

Ameer Hamza
Ameer Hamza am 3 Okt. 2020
Bearbeitet: Ameer Hamza am 3 Okt. 2020
MATLAB does not recognize what does 'x' means inside fprintf() function call. Try the following code
chop(3,4.333352312)
function chop(numdigits,float)
y = floor(log10(float)+1); %number of digits in the integer part
fprintf(sprintf('%%%d.%df', numdigits+1, numdigits-y), float);
end

Community Treasure Hunt

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

Start Hunting!

Translated by