C# double
最后修改于 2023 年 7 月 5 日
在本文中,我们将展示如何在 C# 中使用 double 数据类型。
double 类型是编程中的基本数据类型之一。 我们可以将数据类型定义为一组值,以及对这些值允许的操作。
double 是一种原始数据类型,它表示计算中的实数。 double 是 System.Double 结构的别名。
浮点数表示计算机中的实数。实数测量连续的量,如重量、高度或速度。在 C# 中,我们有三种浮点类型:float、double 和 decimal。
| C# 别名 | .NET 类型 | 大小 | 精度 | 范围 |
|---|---|---|---|---|
| float | System.Single | 4 字节 | 7 位数字 | +-1.5 x 10-45 到 +-3.4 x 1038 |
| double | System.Double | 8 字节 | 15-16 位数字 | +-5.0 x 10-324 到 +-1.7 x 10308 |
| decimal | System.Decimal | 16 字节 | 28-29 位小数 | +-1.0 x 10-28 到 +-7.9 x 1028 |
上表给出了浮点类型的特征。
C# double 类型常量
double 类型有一些内置常量。
Console.WriteLine(double.MinValue); Console.WriteLine(double.MaxValue); Console.WriteLine(double.E); Console.WriteLine(double.Pi); Console.WriteLine(double.Tau);
该程序打印五个常量。
Console.WriteLine(double.MinValue); Console.WriteLine(double.MaxValue);
我们打印 double 类型的最小和最大可能值。
Console.WriteLine(double.E); Console.WriteLine(double.Pi); Console.WriteLine(double.Tau);
我们打印三个众所周知的数学常量。
$ dotnet run -1.7976931348623157E+308 1.7976931348623157E+308 2.718281828459045 3.141592653589793 6.283185307179586
浮点类型后缀
默认情况下,实数在 C# 程序中是 double 类型。 要使用不同的类型,我们必须使用后缀。 F/f 用于 float 数字,M/m 用于 decimal 数字。
float n1 = 6.78f; double n2 = 6.78; decimal n3 = 6.78m; Console.WriteLine(n1); Console.WriteLine(n2); Console.WriteLine(n3); Console.WriteLine(n1.GetType()); Console.WriteLine(n2.GetType()); Console.WriteLine(n3.GetType());
在上面的程序中,我们使用了三种不同的字面量表示法来表示浮点数。
float n1 = 1.234f;
f 后缀用于 float 数字。
double n2 = 1.234;
如果我们不使用后缀,那么它就是一个 double 数字。 我们可以选择使用 d 后缀。
Console.WriteLine(n1.GetType());
GetType 方法返回数字的类型。
$ dotnet run 6.78 6.78 6.78 System.Single System.Double System.Decimal
C# 转换为 double
在下一个示例中,我们将展示如何将值转换为 double 类型。
float n1 = 6.78f;
decimal n2 = 6.78m;
int n3 = 7;
Console.WriteLine(n1);
Console.WriteLine(n2);
Console.WriteLine(n3);
Console.WriteLine("-------------------");
double d1 = (double) n1;
double d2 = decimal.ToDouble(n2);
double d3 = Convert.ToDouble(n3);
Console.WriteLine(d1);
Console.WriteLine(d2);
Console.WriteLine(d3);
Console.WriteLine("-------------------");
Console.WriteLine(d1.GetType());
Console.WriteLine(d2.GetType());
Console.WriteLine(d3.GetType());
我们定义三个具有 float、decimal 和 int 类型的变量。 我们将这些值转换为 double 类型。
float n1 = 6.78f; decimal n2 = 6.78m; int n3 = 7;
我们定义三个变量。
double d1 = (double) n1;
我们使用强制转换操作将 float 值转换为 double。
double d2 = decimal.ToDouble(n2);
在第二种情况下,我们使用 decimal.ToDouble 内置方法将 decimal 转换为 double。
double d3 = Convert.ToDouble(n3);
最后,对于整数类型,我们使用外部 Convert 类。
$ dotnet run 6.78 6.78 7 ------------------- 6.78000020980835 6.78 7 ------------------- System.Double System.Double System.Double
请注意,第一次转换中存在一些小错误。
C# 从 double 类型转换
在下一个示例中,我们将展示如何从 double 类型转换为其他数据类型。
double val = 6.78; float n1 = (float) val; decimal n2 = Convert.ToDecimal(val); int n3 = Convert.ToInt32(val); Console.WriteLine(n1); Console.WriteLine(n2); Console.WriteLine(n3); Console.WriteLine(n1.GetType()); Console.WriteLine(n2.GetType()); Console.WriteLine(n3.GetType());
我们定义一个 double 值。 我们将该值转换为 float、decimal 和 int。
$ dotnet run 6.78 6.78 7 System.Single System.Decimal System.Int32
double 类型不精确
double 类型不精确。 计算中存在小的舍入误差。 在许多情况下,这些不会构成问题。 例如,如果一个项目是 1.78 毫米还是 1.7801 毫米日志,则无关紧要。
在财务和货币计算中,这些小错误很重要。 对于这些类型的计算,我们使用 decimal 类型。
double n1 = 0.1 + 0.1 + 0.1;
double n2 = 0.3;
Console.WriteLine(n1);
Console.WriteLine(n2);
if (n1 == n2)
{
Console.WriteLine("The values are equal");
} else
{
Console.WriteLine("The values are not equal");
}
该程序演示了使用 double 类型进行简单计算时的一个小错误。
$ dotnet run 0.30000000000000004 0.3 The values are not equal
这两个值不相等,因为加法运算中存在一个很小的错误。
C# 对 double 值进行四舍五入
舍入数字是向上或向下调整数字以使计算更容易。 我们可以四舍五入
double double.Round(double x, int digits, MidpointRounding mode)
该方法使用指定的舍入模式将 double 值舍入到指定数量的小数位。
| 模式 | 描述 |
|---|---|
| AwayFromZero | 向远离零的最近数字舍入 |
| ToEven | 向最近的偶数舍入 |
| ToNegativeInfinity | 向下舍入 |
| ToPositiveInfinity | 向上舍入 |
| ToZero | 向零舍入 |
该表显示了可用的舍入模式。
double n1 = 1 / 7d;
double n2 = -1 / 7d;
Console.WriteLine(n1);
Console.WriteLine(n2);
Console.WriteLine("-------------------------");
Console.WriteLine(double.Round(n1, 3, MidpointRounding.ToEven));
Console.WriteLine(double.Round(n2, 3, MidpointRounding.ToEven));
Console.WriteLine("-------------------------");
Console.WriteLine(double.Round(n1, 3, MidpointRounding.AwayFromZero));
Console.WriteLine(double.Round(n2, 3, MidpointRounding.AwayFromZero));
Console.WriteLine("-------------------------");
Console.WriteLine(double.Round(n1, 3, MidpointRounding.ToZero));
Console.WriteLine(double.Round(n2, 3, MidpointRounding.ToZero));
Console.WriteLine("-------------------------");
Console.WriteLine(double.Round(n1, 3, MidpointRounding.ToNegativeInfinity));
Console.WriteLine(double.Round(n2, 3, MidpointRounding.ToNegativeInfinity));
Console.WriteLine("-------------------------");
Console.WriteLine(double.Round(n1, 3, MidpointRounding.ToPositiveInfinity));
Console.WriteLine(double.Round(n2, 3, MidpointRounding.ToPositiveInfinity));
在该示例中,我们有一个正的和一个负的 double 值。 我们使用可用的舍入模式将这些值舍入到三位小数。
$ dotnet run 0.14285714285714285 -0.14285714285714285 ------------------------- 0.143 -0.143 ------------------------- 0.143 -0.143 ------------------------- 0.142 -0.142 ------------------------- 0.142 -0.143 ------------------------- 0.143 -0.142
来源
在本文中,我们使用了 C# 语言中的 double 类型。
作者
列出所有 C# 教程。