假設我想將數字0.011124325465476454
轉換爲MATLAB中的字符串。將數值轉換爲MATLAB中的字符串
如果我打
mat2str(0.011124325465476454,100)
我得到0.011124325465476453
其不同之處在於最後一個數字。
如果我打num2str(0.011124325465476454,'%5.25f')
我得到0.0111243254654764530000000
其填充與不期望的零和在最後一位數字的不同(3應該是4)。
我需要一種方法來將具有隨機小數位數的數字轉換爲它們的EXACT字符串匹配(無零填充,無最終數字修改)。
有沒有這樣的方式?
編輯:由於我沒有記住Amro和nrz提供的有關精度的信息,因此我添加了一些關於該問題的其他信息。我實際需要轉換的數字來自將其輸出到txt文件的C++程序,它們都是C++ double
類型。 [注意:從txt文件輸入數字到MATLAB的部分不是由我編碼的,我實際上不允許修改它以將數字保留爲字符串而不將其轉換爲數字。我只能訪問這個代碼的「輸出」,這是我想要轉換的數字]。到目前爲止,我還沒有得到超過17位小數的數字(注意:因此上面提供的示例中,小數點後18位不是非常指示性的)。
現在,如果數15個數字,例如0.280783055069002
然後num2str(0.280783055069002,'%5.17f')
或mat2str(0.280783055069002,17)
回報
0.28078305506900197
這是不準確的數量(見最後位數)。
但如果我打mat2str(0.280783055069002,15)
我得到
0.280783055069002
這是正確的!
可能有一百萬種方法可以對問題進行「編碼」(例如,創建一個執行轉換的例程),但是當我輸入一個數字時,使用標準的內置MATLAB來獲得理想結果的方式並不是這樣。隨機數的小數(但不超過17);
@niels - 但是,如果不使用可讓您以更高精度工作的工具,您無法達到要求的精度。儘管如此,您需要認識到使用浮點數字形式(這是雙倍數字形式)將始終使最不重要的數字處於危險之中。 HPF這種形式的另一個優點是它是十進制的。所以數字以十進制形式存儲,而不是二進制形式。 – 2012-06-06 09:09:32
@niels - 是的,它完全是關於精度以及數字作爲二進制數存儲在雙精度數中的方式。在您明白0.280783054不能完全代表二進制浮點數的情況下,您將永遠無法解決此問題。 – 2012-06-06 09:38:59
默認情況下,MATLAB將所有數字存儲爲double,因此尾數爲52個二進制位。如果您使用單個號碼來存儲號碼,那麼x =單號(0.280783054);你會得到:sprintf('%。30f',x) ans = 0.280783057212829589843750000000 – 2012-06-06 10:09:43