我正在使用一個生成幾千個ASCII文件(約束)的工具,其中的內容包含浮點數。我想通過一個類似的工具來運行這些約束來進行比較,該工具無法處理浮點值超過20位小數。手動測試表明簡單的截斷就足夠了。那麼,如何將文件中的所有浮點值(由句點唯一標記)截斷爲不超過20個小數位?截斷文件中的浮點數
感謝,
喬恩
我正在使用一個生成幾千個ASCII文件(約束)的工具,其中的內容包含浮點數。我想通過一個類似的工具來運行這些約束來進行比較,該工具無法處理浮點值超過20位小數。手動測試表明簡單的截斷就足夠了。那麼,如何將文件中的所有浮點值(由句點唯一標記)截斷爲不超過20個小數位?截斷文件中的浮點數
感謝,
喬恩
我肯定知道Java和C(和其它語言幾乎可以肯定)有辦法格式字符串。 String.format()和printf()是一些很好的例子。這些可以通過做類似的情況下使用:
printf("%.20f", myFloat);
我會在第二個找到更好的說明網站。
編輯:
這也許應該是一個足夠好的鏈接以獲得一個想法:
http://www.cplusplus.com/reference/clibrary/cstdio/printf/
編輯:
,如果你想用SED,快速搜索品牌看起來好像sed也有printf功能。我發現的例子是在這裏:
這很難說沒有你的平臺和語言/工具,你舒服的更多信息。
如果您的文件採用逗號或製表符分隔或固定寬度格式,我會嘗試一個電子表格應用程序(如Windows上的Excel或其他平臺上的Open Office)。
如果是更復雜的,你可以嘗試Perl或Python。
用於工具相關的正則表達式,像sed(或Perl)將是:
s/^([0-9]*\.)([0-9]{20})([0-9]*)$/\1\2/g
這個正則表達式基本上與單個數字的任意的字符串匹配「」在裏面。它將它分爲三部分:包括'。'之前的部分,接下來的20個數字和其餘的數字。然後輸出前兩個部分。使用regular expression reference時,您應該可以修改它以符合您的實際模式,而不會有太多麻煩。
至少有兩種方法可以解決這個問題:
我認爲第二種方法是最好的,因爲它不依賴於格式化文件。
如果您正在生成這些約束文件,只輸出不超過最大小數。 – Mat
他們需要很長時間才能生成,所以截斷是一個潛在的更便宜的解決方案。 – Jono
你在用什麼語言工作? –