math.signum 返回 -1.0、0.0 或 1.0,仅支持 float 和 double 类型;区分 +0.0 和 -0.0,nan 输入返回 nan;需整数结果时可安全强转为 int。

Math.signum 是 Java 中用于获取数字“符号函数值”的标准方法,返回 -1.0、0.0 或 1.0,分别对应负数、零、正数。
支持的参数类型只有 float 和 double
它不接受 int、long 等整型,也不接受 String。传入整数会触发自动装箱/类型提升,但需注意精度和语义:
- Math.signum(5) → 编译错误(没有 int 版本)
- Math.signum((double)5) 或 Math.signum(5.0) → 返回 1.0
- Math.signum(-3.5f) → 返回 -1.0f(float 版本返回 float)
区分 +0.0 和 -0.0
Java 遵循 IEEE 754,-0.0 是合法浮点值,signum 会识别并返回 -0.0:
Java JDK 25 来自 OpenJDK 官方归档,版本为 JDK 25,本条下载地址已指向官方 Windows x64 zip 安装包直链,适合调试旧项目或兼容旧版 Java 运行环境。
- Math.signum(0.0) → 0.0
- Math.signum(-0.0) → -0.0(注意:不是 -0,而是带符号的零)
- 0.0 == -0.0 为 true,但 Math.signum(0.0) == Math.signum(-0.0) 也为 true(因为 0.0 == -0.0),但若用 Float.compare 或 Double.compare 可区分
NaN 输入返回 NaN
遇到非数字输入时,不抛异常,而是原样返回 NaN:
- Math.signum(Double.NaN) → NaN
- Math.signum(Float.NaN) → NaN
- 因此使用前若需严格校验,应先用 Double.isNaN() 判断
想得到整数 -1/0/1?需要手动转换
signum 返回的是浮点数(float/double),如需 int 类型结果,可安全转型:
- (int) Math.signum(x) → 对 double x,结果是 -1、0 或 1(因 signum 只返回这三值)
- Math.getExponent(x) == 0 && x != 0 不推荐——signum 已足够简洁
- 注意:对 float 用 (int) Math.signum(f) 同样有效,但建议统一用 double 版本避免隐式转换
Java免费学习笔记:立即使用
解锁 Java 大师之旅:从入门到精通的终极指南










