运算精度丢失和数值丢失问题
来源:互联网 发布:java中文乱码解决总结 编辑:程序博客网 时间:2024/05/01 11:10
运算精度丢失和数值丢失问题
标签(空格分隔): 编程竞赛 编程错题
在做题时,我经常会碰到程序很对,但结果出错的问题。如下面这个。
【题目描述】
经常出国旅行的驴友都知道,需要及时了解当地的气温状况。但不少国家采用了不同的温度计量单位:有些使用华氏温度标准(F),有些使用摄氏温度(C)。现在,请你根据温度转换公式设计一个温度转换程序,可以进行温度转换。如果输入摄氏温度,显示转换的华氏温度;如果输入华氏温度,显示转换的摄氏温度。温度转换的公式为:F=(C×9/5)+32 ,式中F表示华氏温度,C表示摄氏温度。
【输入】
仅一行,2个数。第一个为整数(1或2)表示转换的类型,1表示华氏温度转换为摄氏温度,2表示摄氏温度转华氏温度;第2个为浮点数表示需要转换的温度值。
【输出】
转换后的温度值(保留小数点后 2 位)。输出格式为“The Centigrade is 37.78”或“The Fahrenheit is 37.78”。
这道题很简单,但是我刚开始写的代码是这样的。
#include <stdio.h>int main() { int i; float t,t1,t2; scanf("%d %f",&i,&t); t1 = 5/9*(t-32); t2 = 9/5*t+32; switch (i) { case 1: printf("The Centigrade is %.2f\n",t1);break; case 2: printf("The Fahrenheit is %.2f\n",t2);break; default: printf("error\n"); } return 0;}
注意第七和第八行。程序很对,但每次执行1选择时,结果都是0;每次执行选择2时,结果都是一个整型数。很无语,我始终找不出来是为什么。
后来我才发现,问题出在整型数上了。以第七行为例,C语言二元运算符自左向右运算,是一步步得出结果的,而不是像人一样一下子出结果。当它读到“5/9”时,计算出来的数不是1.8,而是0,因为两个整型数运算,结果还是整型数。这就是问题所在,第八行同理。
如何解决呢?用自动类型转换,可以解决整型变浮点型位数丢失的问题,只需要在其中一个整型数前乘以1.0即可。
阅读全文
0 0
- 运算精度丢失和数值丢失问题
- jsp中比较数值精度丢失问题
- js中小数运算精度丢失问题
- 解决浮点型运算精度丢失问题
- java数值范围以及float与double精度丢失问题
- Java数值避免浮点型计算丢失精度问题
- java精度丢失问题
- 关于商业运算中浮点型运算丢失精度问题
- 浮点类型运算精度丢失
- 浮点型运算精度丢失
- Java Float类型 减法运算时精度丢失问题
- Java Float类型 减法运算时精度丢失问题
- Java Float类型 减法运算时精度丢失问题
- Java Float类型 减法运算时精度丢失问题
- 关于Java浮点数运算精度丢失问题
- java中Double类型的运算精度丢失的问题
- 关于Java浮点数运算精度丢失问题
- 解决double类型运算时精度丢失问题
- 西瓜书9.10:实现自动确定聚类数目的k_means算法
- opengl 基础code实例
- 用getchar和%C输入字符型数据
- 用scanf函数检验输入非法字符
- struts2中 ServletActionContext与ActionContext区别
- 运算精度丢失和数值丢失问题
- TP框架中D方法与M方法的区别
- 类Unix系统目录结构
- 操作系统中 heap 和 stack 的区别
- 进程基础知识
- sed awk文本处理教程
- F盘提示文件系统损坏数据怎样寻回
- PAL,NTSC,分辨率,清晰度和电视线解析
- 32. Longest Valid Parentheses