c# - C# 如何知道文字的类型?

标签 c#

考虑这段代码:

double i = 0xF0000000;
Console.WriteLine(0xF0000000.GetType());
Console.WriteLine(i.GetType());

为什么 C# 为第一个打印 System.UInt32 而为第二个打印 System.Double

是不是因为编译器默认将文字推断为 var 类型?

最佳答案

在这一行中:

double i = 0xF0000000;

literaluint 类型,但它被隐式转换为 double。当您调用 i.GetType() 时,总是 打印 System.Double,因为变量的类型是 double...唯一它可以容纳的值是double

请注意,如果您从 longulong 开始,这种转换为 double 意味着您可能会失去精度。例如:

using System;

public class Program
{
    static void Main()
    {
        long x = 123456789012345678;
        double y = 123456789012345678;
        Console.WriteLine(x.ToString("n"));
        Console.WriteLine(y.ToString("n"));
    }
}

打印

123,456,789,012,345,678.00
123,456,789,012,346,000.00

请注意最后几位数字在 double 中是如何丢失的,因为从 longdouble 的隐式转换可能会丢失精度。 (两者都有 64 位可用,但在 double 中只有其中一些位用于尾数。)

对于 intuint 字面量来说这不是问题,但值得注意的是转换正在进行。

关于c# - C# 如何知道文字的类型?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33951651/

相关文章:

c# - .NET 中的异常错误代码

c# - 如何获取 Web 应用程序中的事件 session 列表?

C# Linq to Objects/Syntax 并有效地搜索一个集合成员是否存在于另一个子集合集合中

c# - 如何在 ASP .NET 中的 Web 窗体控件中实现 CSS 类?

C# - Windows 窗体中的简单二维图形绘制

c# - 在 webapi 中设置状态代码和内容

c# - 公共(public)内部类

c# - 使 MouseWheel 事件从子级传递到父级

c# - 如何返回更具体的 HTTP 代码(如 401.X)

c# - 无效的阅读尝试 - 可以使用 Action 吗?