我正在使用awkc
從awk腳本生成可執行文件。我在awk腳本abc.awk下列行:如何在awk腳本中將lang env設置爲「en_US.UTF-8」?
BEGIN{printf "Value=%s\n",(3.13+3.26)}
我已經生成可執行文件(abc.exe),我已經在不同的系統執行。它在浮點運算中給出不同的輸出。
在一個本地系統上,它提供輸出6.39
,但它在位於不同時區的另一個系統上輸出6
。
當我在各個網站搜索時,我能夠看到設置LANG環境變量,但是如何?
我正在使用awkc
從awk腳本生成可執行文件。我在awk腳本abc.awk下列行:如何在awk腳本中將lang env設置爲「en_US.UTF-8」?
BEGIN{printf "Value=%s\n",(3.13+3.26)}
我已經生成可執行文件(abc.exe),我已經在不同的系統執行。它在浮點運算中給出不同的輸出。
在一個本地系統上,它提供輸出6.39
,但它在位於不同時區的另一個系統上輸出6
。
當我在各個網站搜索時,我能夠看到設置LANG環境變量,但是如何?
我不確定這是否與您的不同系統上的區域設置有關,但如果您正在查找浮點數,則應使用"%f"
格式說明符。爲了得到一個答案2位小數,使用"%.2f"
:
BEGIN{printf "Value=%.2f\n",(3.13+3.26)}
這應該給予同樣的結果,無論是系統的它運行。
編輯:基於鏈接的問題,也許你應該嘗試使用LC_NUMERIC=C
明確設置區域設置:
LC_NUMERIC=C awk 'BEGIN{printf "Value=%.2f\n",(3.13+3.26)}'
不管它正在運行的系統應該工作。
我嘗試過使用「%」。2f「,但結果是」Value = 6,00「 我想知道逗號而不是結果,我認爲有一些與語言環境有關的依賴關係,是不是? – Vamshi 2014-10-17 10:56:43
所以如果你嘗試'3,13+ 3,26'在這個系統上,我想它的工作原理? – 2014-10-17 11:02:54
它不工作,因爲EXE不是由於格式錯誤而生成的,但是我需要一些通用於所有系統的解決方案 其實我的要求是針對動態值實際上存儲在一些變量中,所以通過調試我發現浮動的問題,所以從不同的網站我發現設置區域設置LC_ALL或LC_NUMERIC爲處理數字表達式的某些值,但沒有解釋如何在腳本中使用它。 – Vamshi 2014-10-17 11:19:44
如果您將程序交給其他人,則環境變量通常是您無法控制的。我會考慮在你的printf
-call中更具體。您可以將數字格式化爲令人驚訝的細節。您可能正在尋找float
(%f
)(你現在正在使用string
(%s
)。
如果您發現你與你的printf
-calls使得總是同樣的伎倆,你可以控制數TO- 。在一個BEGIN塊可變CONVFMT
字符串轉換設置我被介紹到一個通過gawk
,但顯然它是在POSIX標準是否awkc
支持這一點,我不知道
從gawk manual。:
此字符串控制數字轉換爲字符串(請參閱 轉換)。實際上,它通過作爲sprintf()函數的第一個參數 (請參閱字符串函數)進行傳遞。其默認值 的值爲「%.6g」。 CONVFMT是由POSIX標準引入的。
這是awk腳本的一部分嗎?應該是'printf'?你能用最小的例子'awk'重現這個問題嗎?BEGIN {printf「Value =%s \ n」,(3.13 + 3.26)}''? – 2014-10-17 08:30:16
我已簡要介紹了您的建議。要添加我已經生成的EXE用以下命令 awkc -o -f –
Vamshi
2014-10-17 10:22:12
您可能想要看看這個問題:http://stackoverflow.com/questions/18946689/why-does-awk-refuse-to -sum-up-floats – 2014-10-17 11:14:40