(int)(x+0.5)但也指出这种方法对负数无效。此外,一个更为明智的方法是用 long 替代 int。下面我们来更进一步地解释这个问题。首先,这个问题的解决方案取决于我们所需要的转换方式:是截断转换还是舍入转换;另一方面,它基本与我们需要转换的浮点数类型无关──无论是 float 还是 double,甚至是 long double。有时人们觉得一个浮点变量的值和一个整型变量的值可以完全一样地可表示,你可能相信 x 值为 100.0 时我们只要把它转换为整型就会得到整数 100。但在任何时候,你都不应依赖于期望一个浮点数的值能够与一个整型数的值完全相等,你真正所需要的可能是四舍五入。截

断转换的意思是抛弃所有的小数部分,例如 3.9 将被转换为 3,这种转换是 C

语言中将浮点数转换为整型数的默认方式,也就是说无论在什么时候,只要将浮点数转换为整型数,采用的都是这种方式。关于这种转换何时发生,有一些特殊的规

定,这里我们仅指出赋值时所发生的转换,比如i = x;其中 i 是一个整型数,x 是一个浮点数。当然,在显式类型转换的情况下,这样的转换也会发生,比如(int) x舍入转换是指获取与给定浮点数最为接近的整型数,因此 3.9 应被转换为 4,这才是人们提出我们正在解决的这个问题时所真正需要的。对于舍入转换,我们没有直接的工具(比如运算符或者库函数),严格地说,舍入转换并非与 C 标准里所定义的转换在同一意义下的转换。对于正的浮点数,最简单的四舍五入方法就是用这样的一个表达式(long) (x+0.5)但是如果表达式对负数有效的话会更好,即使在你看来负数的情况不会发生。这意味着你可以用一个条件表达式:x >= 0 ? (long)(x+0.5) : (long)(x-0.5)这个表达式的返回值就是与浮点变量 x 的值最接近的整数值。如果需要大量地使用舍入转换,则可以写这样的一个宏:#define round(x) ((x)>=0?(long)((x)+0.5):(long)((x)-0.5))这可以在某种程度上使代码更具可读性。注意到这样的转换会将 1.5 变为 2 但却将 -1.5 变为 -2,那么对于这样正好处于两个整数之间的浮点数,你可能需要做一些其它的处理,但这在实际当中并不十分重要。需要小心的是,将一个浮点数转换为一个整型数可能导致上溢,但大多数的实现都没有进行相关的判断。用 long 替代 int 会给出一个更宽的范围(建议使用 long),但仍然比浮点数的范围要小得多。如果效率不是至关重要的话,则可以定义这样的一个函数(而不是简单地写一个 #define),使你的程序更具鲁棒性:long round(double x) {assert(x >= LONG_MIN-0.5);assert(x <= LONG_MAX+0.5);if (x >= 0)return (long) (x+0.5);return (long) (x-0.5);}如果在意效率的话,可以写这样一个宏#define round(x) ((x) < LONG_MIN-0.5 || (x) > LONG_MAX+0.5 ?\error() : ((x)>=0?(long)((x)+0.5):(long)((x)-0.5))这要求在程序中有 #include ,并且有一个处理错误的函数 error,其返回值为 long 类型。

c 语言 移位四舍五入,关于C 语言中的四舍五入问题相关推荐

  1. c语言变量先移位再判断,c语言移位

    c语言移位[编辑] 概述 C语言移位是C语言程序中的一种操作程序,是一种运算.在C语言中判断奇偶.乘2.除2等操作都可以使用位移操作方便的实现.移位操作的优先级是非常非常低的,比四则运算要低. C语言 ...

  2. C语言中关于四舍五入的计算方法

    C语言中关于四舍五入的处理 利用取整运算截断 eg: 数字0.45 取整后结果为0: 数字3.67取整后结果为3: 做整数部分的四舍五入 即:x=(int)(0.45+0.7) 取整后结果为1: #i ...

  3. 关于c语言中如何四舍五入(圆整)的问题!

    关于c语言中如何四舍五入(圆整)的问题! 在c语言中,用70.0/6得到的值赋给一个浮点变量,只会得到11.666667(因为浮点型只留下小数点后六位),而如果我们想输出结果的约数,必须要对结果进行四 ...

  4. C语言中实现四舍五入

    C语言中实现四舍五入: (int)(a+0.5)即可. 很巧妙的用了取整规则. 也不用导入math.h 同样注意负数的情况. 把 + 换成 - 即可. float f = --; int i = (i ...

  5. c语言编程物理实验,大学物理实验报告大全C语言编程在大学物理实验中处理数据的研究...

    大学物理实验报告大全C语言编程在大学物理实验中处理数据的研究 摘要 用C语言编程的方法处理比较复杂的实验数据,简捷准确且避免了传统方法的弊端,与用Excel处理数据的方法相比,其结果更符合误差理论. ...

  6. C语言移位操作符和位操作符

    移位操作符 在C语言中 << 成为为左移操作符,>>称为右移操作符,例下面一串代码 #include<stdio.h> int main() {int a = 2; ...

  7. 四舍五入(C语言实现)

    C语言中的四舍五入 我们知道,C语言直接取整是不能实现四舍五入的,我们需要靠自己的方法实现四舍五入.而且有不少题目会在浮点数的输出中要求我们四舍五入.所以学会用C语言实现四舍五入还是很有必要的.本篇文 ...

  8. R语言ggplot2可视化移除数据中的NA值再可视化实战:消除图形中非常突出的NA柱状图、使用subset函数、使用drop_na函数

    R语言ggplot2可视化移除数据中的NA值再可视化实战:消除图形中非常突出的NA柱状图.使用subset函数.使用drop_na函数 目录

  9. R语言使用edit函数在Rsudio中生成数据编辑器(在windows中生成编辑器)、在编辑器中输出需要的数据生成最终的dataframe

    R语言使用edit函数在Rsudio中生成数据编辑器(在windows中生成编辑器).在编辑器中输出需要的数据生成最终的dataframe 目录

  10. R语言ggplot2可视化:计算dataframe中每个数据列缺失值的个数、使用堆叠的条形图(Stacked Barplot)可视化每个数据列的缺失值的情况(自定义堆叠条形图的形式)

    R语言ggplot2可视化:计算dataframe中每个数据列缺失值的个数.使用堆叠的条形图(Stacked Barplot)可视化每个数据列的缺失值的情况(自定义堆叠条形图的形式) 目录

最新文章

  1. 语言与智能:维特根斯坦框架、人工智能以及共情的出现
  2. #51CTO学院四周年#让学习成为习惯
  3. Symbian,倒在3G的门槛上
  4. mysql_connect报告“No such file or directory“错误的解决方法
  5. 自动驾驶使用贝塞尔曲线进行静态障碍物避障测试
  6. Spring事务处理之 编程式事务 和 声明式事务
  7. jvm间歇性崩溃分析
  8. jQuery插件uploadly报security Error:error #2049解决方案
  9. 拖拽之路(四):自定义QListView实现美观的拖拽样式(拖拽不影响选中)
  10. 利用BitmapCutter实现截取图片功能之修改加强版,兼容Jquery1.4.x以上版本
  11. 如何在Cell里画出虚线?
  12. MatLab 计算开根号
  13. 如何在IGV上使用BLAT搜索非模式物种
  14. 正则表达式前端使用手册
  15. 中医是如何辩证出脾胃湿热的?
  16. 让卫浴间四季花香 最懂你的智能马桶 ——安华智能坐便器aB13017-1众测报告
  17. oracle 查询索引个数,Oracle数据库索引的创建和查询
  18. 【多目标优化】2. 非支配排序遗传算法 —(NSGA、NSGA-II)
  19. 项目十大管理(六)人力资源管理
  20. 小米王川:我与雷军和而不同

热门文章

  1. Java案例:Log4J基本使用
  2. 【BZOJ10561862】【codevs1985】排名系统,Splay+trie树
  3. C ++ 类 | 构造函数w参数_6
  4. 英语中正式和休闲的打招呼_6
  5. mysql生产应用_MySQL备份利器之Xtrabackup--生产应用
  6. python百度贴吧发帖签到_python 爬虫 百度贴吧签到小工具
  7. 每日小记2017.2.28
  8. 仿链家地图找房_我在深圳的第一个家 是在有着6000套房的工业区里
  9. 【英语学习】【WOTD】lacuna 释义/词源/示例
  10. Intel Core Enhanced Core架构/微架构/流水线 (14) - 存储器/内存读写 Memory Load/Store