现在的位置: 首页 > 综合 > 正文

.NET(C#):保留浮点数的有效数字,不难不难和C++一样简单!

2013年02月04日 ⁄ 综合 ⁄ 共 1147字 ⁄ 字号 评论关闭

注意:

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

抱歉!评论已关闭.