CodeGym /课程 /C# SELF /浮点数和double类型入门

浮点数和double类型入门

C# SELF
第 6 级, 课程 2
可用

1. 小数

来回忆下我们的项目——比如说是个最简单的计算器。或者任何需要算数的程序(从算钱到复杂的物理模拟都行)。现实生活里很多东西都不是整数,这没办法!

所以我们得用上新的数据类型啦!

在编程里,小数还叫做浮点数,或者带小数点的数(floating-point)。在C#里,跟大多数语言一样,它们用来存不光是整数,还有各种“小数”:像3.14、-28.57、2.718281828这种...

浮点数主要有两种类型:

类型 存啥 数值范围(大概) 精度 典型大小
float
数字 ±1.5 × 10-45 ... ±3.4 × 1038 ~小数点后7位 4字节
double
数字 ±5.0 × 10-324 ... ±1.7 × 10308 ~小数点后15-16位 8字节

float类型

float这个名字来自floating-point number——带小数点的数。数学里的浮点数有很多特性,但计算机有很多限制。所以其实在C#里叫它“浮点数”更准确点。

float类型一般能存7位有效数字(比如0.1234567),还有指数部分,占4字节内存。这个精度其实不高,所以大家都更喜欢用双精度的数。

2. double类型变量的声明和初始化

和int差不多——只是现在用double。

// 声明变量并赋值为圆周率
double pi = 3.1415926;

// 也可以先声明,不初始化
double averageSalary;
averageSalary = 91234.56;

// 还能做运算!
double pizzaPieces = 8;
double friends = 3;
double piecesPerFriend = pizzaPieces / friends; // 2.666...(不是2)

语法小细节:

  • 小数点要用点(3.14)。用逗号会报错!
  • 严格来说,写double d = 3;不会报错——类型会自动转换(整数变成“浮点数”,不会丢精度)。

3. 用Console输入输出浮点数

先来输出个小数:

double amount = 42.75;
Console.WriteLine(amount); // 输出:42.75

没问题!加点文字试试:

Console.WriteLine("你的账户余额: " + amount + " 欧元。"); // 你的账户余额: 42.75 欧元。

键盘输入

重点:Console.ReadLine()总是返回字符串,要把它转成double类型。

Console.WriteLine("请输入窗外温度:");
string input = Console.ReadLine();
double temperature = double.Parse(input); // 字符串转double

Console.WriteLine("外面现在: " + temperature + " 度。");

4. double类型实战:算术运算

所有常见运算(+、-、*、/)都和int一样用法:

double distance = 100.5;
double time = 2.0;
double speed = distance / time; // 50.25

Console.WriteLine("平均速度: " + speed); // 平均速度: 50.25

这就是全部的算术啦。唯一的区别:只要有一个操作数是double,结果一定是小数。

和int对比下

int a = 5, b = 2;
Console.WriteLine(a / b); // 2(小数部分被扔掉了)

double aa = 5, bb = 2;
Console.WriteLine(aa / bb); // 2.5

5. 用double时常见的坑和奇怪现象

字符串转换错误

经典场景:用户输入3,14,但程序等着3.14。

// 如果输入"3,14"会报错
double value = double.Parse(Console.ReadLine());

如果你在用逗号做小数点的国家(比如波兰、德国),double.Parse能正常工作。但如果程序用的是“英文”设置,那就得用点。

计算机里的“不精确”问题

新手经常会一脸懵逼:

double x = 0.1 + 0.2;
Console.WriteLine(x); // 咦... 0.30000000000000004

恭喜你,遇到浮点数在计算机里的“魔法”了。其实很多小数在二进制里根本没法精确表示。下节课会详细聊,这里先别慌!大多数应用场景都没啥大问题,但做金融或科学计算要注意。

6. 重点:double和int——自动和强制类型转换

有时候你会把整数和小数加起来,或者把int赋值给double变量——不会报错:

int i = 2;
double d = i; // 没问题!
Console.WriteLine(d); // 2

double dd = 3.7;
int ii = (int) dd; // 要手动把double转成int!
Console.WriteLine(ii); // 3,小数部分被扔掉了

很多人会奇怪——为啥转完小数部分没了?因为int类型根本存不了小数(点后面的都直接消失)。

下节课会详细聊double转int和(int)操作符。

7. 格式化输出:让double更好看

很多时候double默认输出一堆没用的零。可以格式化一下:

double temp = 23.56789;
Console.WriteLine(temp); // 23.56789

Console.WriteLine(temp.ToString("F2")); // 23.57(小数点后2位)
Console.WriteLine($"{temp:F1}");        // 23.6(字符串插值)
格式 结果 说明
"F0" 24 没有小数部分
"F2" 23.57 小数点后两位
"F5" 23.56789 小数点后五位
2
任务
C# SELF, 第 6 级, 课程 2
已锁定
用 double 类型做简单算术
用 double 类型做简单算术
2
任务
C# SELF, 第 6 级, 课程 2
已锁定
计算速度
计算速度
评论
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION