Writematrix loses precision with string present in data

조회 수: 8 (최근 30일)
Martin
Martin 2025년 3월 18일
답변: Walter Roberson 2025년 3월 18일
I am saving a matrix to file and need full precision in the data. I am using the writematrix function, and my problem can be shown in this minimal example:
writematrix([1;0.123456789],"./testA.txt")
writematrix(["Test";0.123456789],"./testB.txt")
Then testA.txt:
1
0.123456789
And testB.txt
Test
0.12346
Is there a way to have strings (such as a header row) in my matrix but retain the full precision in the data?

채택된 답변

Walter Roberson
Walter Roberson 2025년 3월 18일
writematrix(["Test";compose("%.999g", 0.123456789)],"./testB.txt")
dbtype testB.txt
1 Test 2 0.12345678899999999733605449137030518613755702972412109375
Retains full precision.

추가 답변 (1개)

dpb
dpb 2025년 3월 18일
이동: dpb 2025년 3월 18일
["Test";0.123456789]
ans = 2x1 string array
"Test" "0.12346"
The problem, if there is one, is in combining the string and the numeric into one array; MATLAB can have only one data type in an array other than a cell array and so the numeric value was coerced to a string before it was written; ergo, it isn't writematrix that is the issue here, it's trying put a square peg in a round hole; mixing data types inappropriately.
Probably the easiest workaround with the minimal example would to use a table instead...
tT=table(0.123456789,'VariableNames',"Test")
tT = table
Test _______ 0.12346
writetable(tT,"testB.txt",'WriteVariableNames',1)
type testB.txt
Test 0.123456789

카테고리

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

제품


릴리스

R2023b

Community Treasure Hunt

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

Start Hunting!

Translated by