2014-10-17 40 views
0

我正在使用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環境變量,但是如何?

+0

這是awk腳本的一部分嗎?應該是'printf'?你能用最小的例子'awk'重現這個問題嗎?BEGIN {printf「Value =%s \ n」,(3.13 + 3.26)}''? – 2014-10-17 08:30:16

+0

我已簡要介紹了您的建議。要添加我已經生成的EXE用以下命令 awkc -o -f Vamshi 2014-10-17 10:22:12

+0

您可能想要看看這個問題:http://stackoverflow.com/questions/18946689/why-does-awk-refuse-to -sum-up-floats – 2014-10-17 11:14:40

回答

0

我不確定這是否與您的不同系統上的區域設置有關,但如果您正在查找浮點數,則應使用"%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)}' 

不管它正在運行的系統應該工作。

+0

我嘗試過使用「%」。2f「,但結果是」Value = 6,00「 我想知道逗號而不是結果,我認爲有一些與語言環境有關的依賴關係,是不是? – Vamshi 2014-10-17 10:56:43

+0

所以如果你嘗試'3,13+ 3,26'在這個系統上,我想它的工作原理? – 2014-10-17 11:02:54

+0

它不工作,因爲EXE不是由於格式錯誤而生成的,但是我需要一些通用於所有系統的解決方案 其實我的要求是針對動態值實際上存儲在一些變量中,所以通過調試我發現浮動的問題,所以從不同的網站我發現設置區域設置LC_ALL或LC_NUMERIC爲處理數字表達式的某些值,但沒有解釋如何在腳本中使用它。 – Vamshi 2014-10-17 11:19:44

0

如果您將程序交給其他人,則環境變量通常是您無法控制的。我會考慮在你的printf-call中更具體。您可以將數字格式化爲令人驚訝的細節。您可能正在尋找float%f)(你現在正在使用string%s)。

如果您發現你與你的printf -calls使得總是同樣的伎倆,你可以控制數TO- 。在一個BEGIN塊可變CONVFMT字符串轉換設置我被介紹到一個通過gawk,但顯然它是在POSIX標準是否awkc支持這一點,我不知道

gawk manual。:

此字符串控制數字轉換爲字符串(請參閱 轉換)。實際上,它通過作爲sprintf()函數的第一個參數 (請參閱字符串函數)進行傳遞。其默認值 的值爲「%.6g」。 CONVFMT是由POSIX標準引入的。