C语言 小数点后一位四舍五入的实现

  • 功能:输入float型变量,输出小数点一位四舍五入的结果
  • 举例1:输入1.65,输出1.7
  • 举例2:输入1.33,输出1.3

第一时间很容易想到使用四舍五入函数 round() 实现的方式:

c 复制代码
float My_Data.Data_Float;
My_Data.Data_Float = 1.65;
Data_Result = round(My_Data.Data_Float*10.0)/10.0; // 小数点后一位四舍五入
// 实测Data_Result = 1.6,而非需要的1.7

实测这种方式不能完全实现小数点后一位的四舍五入,输入1.75可以输出1.8,但是输入1.65时不能输出1.7。


推荐使用"加0.5,再用 trunc() 取整"的方式:

c 复制代码
float My_Data.Data_Float;
My_Data.Data_Float = 1.65;
Data_Result = trunc(My_Data.Data_Float*10+0.5)/10.0; // 小数点后一位四舍五入
// 实测Data_Result = 1.7

知道原理的朋友欢迎在评论区给出根本原因的分析~

相关推荐
电院工程师2 小时前
SM3算法C语言实现(无第三方库,带测试)
c语言·算法·安全·密码学
mxpan5 小时前
Golang 与 C/C++ 交互实践
c语言·c++·golang
才鲸嵌入式6 小时前
C++相比于C语言增加了哪些概念?
c语言·c++·单片机·嵌入式·arm·面向对象·软件
听风lighting10 小时前
1. C++ WebServer项目分享
linux·c语言·c++·设计模式·嵌入式·webserver
int型码农11 小时前
数据结构第八章(五)-外部排序和败者树
c语言·数据结构·算法·排序算法
ghie909013 小时前
Ubuntu编译ffmpeg解决错误:ERROR: avisynth/avisynth_c.h not found
c语言·ubuntu·ffmpeg
iCxhust14 小时前
PC16550 UART接收中断处理完整示例代码
c语言·开发语言·stm32·单片机·嵌入式硬件
C++ 老炮儿的技术栈17 小时前
C++实现手写strlen函数
大数据·c语言·c++·编辑器
今日待办18 小时前
Arduino Nano 33 BLE Sense Rev 2开发板使用指南之【外设开发】
c语言·单片机·嵌入式硬件·mcu
AI+程序员在路上19 小时前
ABI与API定义及区别
c语言·开发语言·c++