【问题标题】:C#: implicitly convert double to float?C#:将双精度数隐式转换为浮点数?
【发布时间】:2018-11-03 07:04:34
【问题描述】:

我知道在 C# 中默认情况下不允许从 double 到 float 的隐式转换,但是有什么方法可以启用这种转换吗?有某种编译指示?我不担心缺乏精度(因为我的应用程序在任何地方都不需要超过浮点精度),而且只是对必须始终确保我明确地将所有十进制值声明为浮点数感到恼火,否则我会得到编译错误。

【问题讨论】:

  • 不,没有。我想知道为什么有这么多数字被处理为浮点数并在代码中显式编写,以至于在后面添加单个字母是一个问题或负担,或者它们不能作为双精度数处理。
  • .NET 有一个特定的list of implicit numeric conversions,它们都用于扩大转换......即从具有较小范围的类型到具有较大范围的类型。像 double 到 float 这样的缩小转换需要显式转换。
  • 你能举个例子说明你想避免什么吗?可能有另一种方法来处理您尝试做的事情,但是您还不清楚“将所有小数声明为浮点数”是什么意思。

标签: c# double implicit


【解决方案1】:

不,你不能。由于这种转换可能会导致精度损失,并且编译器无法确定它是否会发生,因此您必须明确表示您知道转换。

我不确定您所说的“将小数显式声明为浮点数”是什么意思,但如果您现在没有,您可以通过在末尾添加 f 来判断文字是浮点数

float a = 0.0;  // Wrong, implicit conversion.
float b = 0.0f; // OK. Can also be capital 'F'.

但是,如果您抱怨到处添加这个字母作为负担,那么抱歉,答案是否定的,您无法解决这个问题。

【讨论】:

    【解决方案2】:

    不,没有任何方法可以通过隐式转换来做到这一点,但你可以这样做:

    double a = 0.123456789123456789d;
    float b = (float)a;
    float c = Convert.ToSingle(a);
    bool areBothSame = b == c;
    Console.WriteLine("b == c: "areBothSame);
    //Console Output:
    //b == c: true
    

    Convert.ToSingle() 的作用是:

    public static float ToSingle(double value)
    {
        return (float)value;
    }
    

    所以并不真正符合你的喜好,它做同样的工作。

    【讨论】:

    • 这远非隐式转换。
    • 好吧,没有别的办法
    猜你喜欢
    • 2015-06-12
    • 1970-01-01
    • 2018-04-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-08-09
    • 2011-11-22
    相关资源
    最近更新 更多