强制类型转换取整规则

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档

文章目录


在主流编程语言(如Java、C/C++、C#等)中,double(或float)强制类型转换为int时,并不是四舍五入,而是直接截断(舍弃)小数部分,遵循**「向零取整」**的规则(即结果向数轴上0的方向取整)。

一、核心行为:截断小数部分(向零取整)

无论小数部分是多少(0.1还是0.9),强制转换时只会保留整数部分,直接丢弃小数位。

1. 正数场景
java 复制代码
// Java示例
double d1 = 3.14;
int i1 = (int) d1; // 结果:3(小数部分0.14被截断)

double d2 = 3.9999;
int i2 = (int) d2; // 结果:3(小数部分0.9999被截断)

double d3 = 5.0;
int i3 = (int) d3; // 结果:5(无小数部分,直接保留)
2. 负数场景

负数的强制转换同样是截断小数部分,向0的方向取整(而非向负无穷取整):

java 复制代码
double d4 = -3.14;
int i4 = (int) d4; // 结果:-3(小数部分0.14被截断)

double d5 = -3.9999;
int i5 = (int) d5; // 结果:-3(小数部分0.9999被截断)

二、如果需要四舍五入,该怎么做?

强制转换的截断行为无法实现四舍五入,需使用语言提供的专用方法:

1. Java

使用Math.round()方法(四舍五入到最近的整数,中间值向正无穷取整):

java 复制代码
double d6 = 3.5;
long l6 = Math.round(d6); // 结果:4(四舍五入)
int i6 = (int) Math.round(d6); // 转int:4

double d7 = -3.5;
long l7 = Math.round(d7); // 结果:-3(中间值向正无穷取整)
int i7 = (int) Math.round(d7); // 转int:-3
2. C/C++

使用<cmath>头文件中的round()函数(需注意返回值是浮点型,需转int):

cpp 复制代码
#include <cmath>
#include <iostream>
using namespace std;

int main() {
    double d = 3.9;
    int i = (int)round(d); // 结果:4(四舍五入)
    cout << i << endl;

    double d2 = -3.9;
    int i2 = (int)round(d2); // 结果:-4(四舍五入)
    cout << i2 << endl;
    return 0;
}

注意:不要用(int)(num + 0.5)的方式(仅对正数有效,负数会出错,比如-3.5 + 0.5 = -3.0,转int是-3,而非四舍五入的-4)。

三、补充:其他取整方式

取整规则 Java方法 C/C++函数 示例(3.9/-3.1)
向零取整(截断) 强制类型转换 强制类型转换 3 / -3
四舍五入 Math.round() round() 4 / -3
向负无穷取整 Math.floor() floor() 3 / -4
向正无穷取整 Math.ceil() ceil() 4 / -3

总结

  • 强制转换doubleint:直接截断小数部分,向零取整,与四舍五入无关;
  • 四舍五入需求 :必须使用语言的专用方法(如Math.round()/round())。
相关推荐
yesyesido3 分钟前
智能文件格式转换器:文本/Excel与CSV无缝互转的在线工具
开发语言·python·excel
_200_5 分钟前
Lua 流程控制
开发语言·junit·lua
环黄金线HHJX.6 分钟前
拼音字母量子编程PQLAiQt架构”这一概念。结合上下文《QuantumTuan ⇆ QT:Qt》
开发语言·人工智能·qt·编辑器·量子计算
王夏奇6 分钟前
python在汽车电子行业中的应用1-基础知识概念
开发语言·python·汽车
He_Donglin7 分钟前
Python图书爬虫
开发语言·爬虫·python
星融元asterfusion16 分钟前
AsterNOS SONiC基于YANG模型的现代网络管理:从CLI到gNMI的演进
开发语言·sonic·yang
web3.088899918 分钟前
1688商品详情API接口深度解析
开发语言·python
欧阳天风23 分钟前
用setTimeout代替setInterval
开发语言·前端·javascript
散峰而望24 分钟前
【算法竞赛】顺序表和vector
c语言·开发语言·数据结构·c++·人工智能·算法·github
小鸡脚来咯26 分钟前
Java字符串详解
java·开发语言