C# 一个方法多个返回值

通常情况下一个方法都只 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)

这个问题先留着,后面有机会请教一下前辈。

发表评论

Powered by WordPress | Theme Revised from Doo

苏ICP备18047621号

Copyright © 2017-2024 追光者博客