read 2 digits in a txt file using %f

조회 수: 8 (최근 30일)
xiaohang  gao
xiaohang gao 2021년 7월 15일
편집: Stephen23 2021년 7월 16일
I use
to create 1000 2 digits random number in a txt file, which looks like below.
now I want to read the file for 2 digits by using %.2f, at below there are two code, the difference is one is using %f and read 4 digits which add 2 zero at the end, the another one using %.2f and got nothing.
I dont understand why it happend like that.
And for further calculation I want only 2 digits accuracy, is there any settings like globle setting to define I only want 0.xx rather than 0.xxxx?
  댓글 수: 1
Stephen23
Stephen23 2021년 7월 16일
편집: Stephen23 2021년 7월 16일
"I dont understand why it happend like that."
Because you are confusing how numeric data are stored in computer memory with how they are displayed on your screen. The precision of the numbers stored in memory is fixed. You can changed the FORMAT, but this only changes how they are displayed, not how they are stored.
"And for further calculation I want only 2 digits accuracy, is there any settings like globle setting to define I only want 0.xx rather than 0.xxxx?"
There is no (common) numeric data type that stores any formatting information (e.g. the number of trailing digits to display), so what you are are requesting simply does not correspond to the reality of how numeric computing works.

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

채택된 답변

Walter Roberson
Walter Roberson 2021년 7월 15일
S = '0.43'
S = '0.43'
A = sscanf(S, '%f');
format short
A
A = 0.4300
format long g
A
A =
0.43
format bank
A
A =
0.43
You are confusing the number of digits stored, with the number of digits displayed.
MATLAB uses IEEE 754 binary double precision, which does not use Base 10 (decimal) representation.
fprintf('%.99g\n', A)
0.429999999999999993338661852249060757458209991455078125
Double Precision uses 53 bits -- representing each number as a 53 bit integer divided by a power of 2. It is not able to represent decimal fractions exactly, for the same mathematical reason that finite decimal is not able to represent 1/3 exactly .
MATLAB stores the 53 bits, but what it displays depends upon your format settings. The default format setting for most people always displays 4 digits for non-integers.

추가 답변 (1개)

Scott MacKenzie
Scott MacKenzie 2021년 7월 15일
편집: Scott MacKenzie 2021년 7월 15일
If you examine the documentation for fscanf, it states that the correct formatSpec to use when reading floating-point numbers is %f. There is no provision for using a more detailed formatSpec as commonly done when writing data using fprintf.
As for your follow-up question, the internal storage of the data is what it is -- full precision floating point. This is completely separate from how numbers are displayed. If you want to display only 2-decimal places that's a different issue. This would be controlled in the usual way; i.e., using the desired formatSpec, such as %.2f, in fprintf.

카테고리

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

제품


릴리스

R2020b

Community Treasure Hunt

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

Start Hunting!

Translated by