通常情况下一个方法都只 return 一个返回值,如果要返回多个值,可以用数组,或者结构体。
这里记录一个有趣的做法。
比如需要一个 convert 方法,传入一个字符串,返回三个数值:转化后的数值、整数部分、小数部分。
如下所示:
using System; using System.Collections.Generic; using System.Linq; using System.Text; namespace ConsoleApplication1 { class Program { static void Main(string[] args) { calculate cal = new calculate(); int inte = 0; float deci = 0; float num = cal.convert("12.672",out inte,out deci); //调用的时候把值 out 到变量里 Console.WriteLine(num.ToString() + "\r\n" + inte.ToString() + "\r\n" + deci.ToString()); Console.ReadLine(); } } class calculate { public float convert(string str_,out int inte_,out float deci_) //可输出多个返回值 { float num_ = 0; float.TryParse(str_, out num_); //这里实际上就是这种操作 inte_ = (int)num_; //整数部分 deci_ = num_ - inte_; //小数部分 return num_; //该方法的返回值类型就根据 return 后面的来定 } } }
代码很简单,关键字就是 out, (●’◡’●) ,可以看到 convert 方法的类型修饰符由 return 的值类型确定。
我以为就这么结束了,但是运行结果却出现了奇怪的现象:
小数部分不应该是 0.672 吗?为什么是0.6719999 ? 这里没有四舍五入的道理吖 (゚Д゚*)ノ
再试一个数字 12.673 :
理想中小数部分应该是 0.673,现在却是 0.6730003 …( _ _)ノ|
加断点调试一下:
没错吖,float 型的 num_ 是 12.673 吖,减去整数部分,剩下小数部分吖,但是结果怎么会这样呢?
难道是 float 型不能直接减 int 型?于是我把整数部分 inte_ 强制转换成 float 型:
但遗憾的是,以上两种转换方式,运行结果都没有因此改变。
这到底是为什么?到底是道德的沦丧,还是代码的扭曲,让程序出现了如此奇怪的结果 (T_T)
这个问题先留着,后面有机会请教一下前辈。