C#:华氏温度转为摄氏温度

文章访问量:

了解什么是decimal类型

区别于C++和C,在C#中除了float和double,还引入了精度更高的decimal数据类型。

什么是decimal

精度更高,范围更小

C#引入了新的数据类型decimal。相比于32位的float和64位的double,decimal表示128位数据类型。不过decimal虽然精度比double更高,但这是因为decimal可表示的小数位要比double更多,而整数范围要比double小。

在C#中,如果没有指明是decimal类型的值,统一默认为double类型。

decimal类型的运算

以计算摄氏度为例

为啥要单独开篇文章讲下decimal类型?主要是如果你之前是写C/C++的,很容易碰到一个坑。官方给的例子就很不错。直接放图

由于精度问题,最后返回的temperature只能是decimal类型,double类型的话达不到示例输出这种精度(建议自己试一下输出double类型的temperature)。而这里有几种常见,但是有坑的写法。先是这种

int fahrenheit=94;
decimal wa=(fahrenheit-32)*(5/9);
Console.WriteLine($"The temperature is {wa}");

最后结果是

The temperature is 0

这个错的地方很明显了,(5/9)这块地方是两个int数相除,后面的小数位被截断了。所以前面就算定义wa是decimal也没用。

另一种写法在C/C++里面很常见,对分数作强制类型转换

int fahrenheit=94;
decimal wa=(fahrenheit-32)*(5.0/9.0);
Console.WriteLine($"The temperature is {wa}");

However,你会得到以下报错

(2,12): error CS0266: Cannot implicitly convert type 'double' to 'decimal'. An explicit conversion exists (are you missing a cast?)

implicitly convert‘,很常见啦,说的就是double不能隐式转换为decimal。而这题我们又不能直接用double,不然精度不够。所以我们需要指明分数相除之后的结果应该是decimal类型。那么正确的写法应该是

int fahrenheit=94;
decimal wa=(fahrenheit-32)*(5m/9);
Console.WriteLine($"The temperature is {wa}");

九分之五上面带m或者下面带m都行,编译器会自己作类型转换。当然为了可读性还是上下都带比较好。它的输出结果为

The temperature is 34.444444444444444444444444447
Subscribe
提醒
0 评论
Inline Feedbacks
View all comments
0
在此留下你的评论x