注意:
C/C++的輸出可能在不同編譯器下會有不同結果。如果你的編譯器和我的不一樣,建議複製C/C++代碼並在自己的編譯器上運行下看結果。
下面所有C#代碼由Visual C# 2010 Express編譯運行
下面所有C/C++代碼由Visual C++ 2010 Express編譯運行
C++的浮點輸出:預設保留6位有效數字
代碼:
double arr[4] = { 123.4567, 12345670, 12.34567, 0.001234567 };
for(int i = 0; i < 4; i++)
cout << arr[i] << endl;
輸出:
123.457
1.23457e+007
12.3457
0.00123457
C#的float是7位,double是15位。可以參考MSDN:http://msdn.microsoft.com/zh-cn/library/dwhawy9k.aspx#GFormatString
注意如果你不用任何格式化符號的話,實際上.NET輸出會預設用”G"格式化符來輸出。
var arr = new double[] { 123.4567, 12345670, 12.34567, 0.001234567 };
foreach (var d in arr)
Console.WriteLine(d.ToString());
輸出:
123.4567
12345670
12.34567
0.001234567
所有數字都是按照原樣輸出。
C++保留有效數字可以設定輸出資料流的精度。當然設定精度不限於cout,可以是任何ios_base。這裡可以用ios_base.precision函數。或者使用<iomanip>中的setprecision函數。它們都可以達到同樣的效果!
比如保留4位有效數字。
代碼:
double arr[4] = { 123.4567, 12345670, 12.34567, 0.001234567 };
cout.precision(4);
for(int i = 0; i < 4; i++)
cout << arr[i] << endl;
輸出:
123.5
1.235e+007
12.35
0.001235
C#的話用“G"的精度表示保留有效數字位元(我驚奇得發現竟然很多人不知道,在搜尋引擎中尋找“C#保留有效數字”,出現諸多CSDN中扯淡的東西,天呐……天天擺在那裡誤導福士,或讓某些人認為C#保留個有效數字都這麼麻煩……)
還是保留4位。
代碼:
var arr = new double[] { 123.4567, 12345670, 12.34567, 0.001234567 };
foreach (var d in arr)
Console.WriteLine(d.ToString("G4"));
輸出:
123.5
1.235E+07
12.35
0.001235