Java:科学计数法和判断变量的类型
原因
之前用C++敲代码,用科学技术法一直都是写的整数类型,现在到Java里面发现居然报错,是个浮点数。
//不报错 int a = 1e5 + 10;
//报错 int a = 1e5 + 10; float a = 1e5 + 10; //不报错 double a = 1e5 + 10;
关于Java的科学计数法
在Java中,当Double的取值符合某条件时,将会以科学计数法的方式显示(下面是个人测试的结果,非从文档中得到的结论):
@Test public void testPrintScientificNotation() { //整数部分位数大于等于8时开始以科学计数法显示 System.out.println(-12345678.0); System.out.println(12345678.0); //整数位为0,当小数位以0开始连续出现大于等于3时开始以科学计数法显示 System.out.println(0.0001); System.out.println(-0.0001); }
结果 -1.2345678E7 1.2345678E7 1.0E-4 -1.0E-4
很多时候,我们需要做一个统一,要么全部以科学计数法输出,要么就全部显示为普通计数。根据网上的资料,主要提及NumberFormat、DecimalFormat、BigDecimal这三种API实现方式。
(详情请看文末的参考)
***
0x表示
- 如果你写一个0x80;那么会把这0,1位串在内存中铺开,并且是32位的一个int,不够32位,则前面补0。
- 如果在强制转换成一个byte,则会把前面全部截掉,保留后8位。
- 如果是0x80L,则是64位的。
一次如果你想直接用位来表示数字就可以写成0x的形式。
public class Test { public static void main(String[] args) { int a = 0x2f;//小写十六进制(等价于0x002f) System.out.println(Integer.toBinaryString(a)); //101111 int b = 0x2F;//大写十六进制 System.out.println(Integer.toBinaryString(b)); //101111 int c = 10;//标准十进制 System.out.println(Integer.toBinaryString(c)); //1010 int d = 010;//以零开头,表示八进制 System.out.println(Integer.toBinaryString(d)); //1000 char e = 0xff;//char为2个字节,16位 byte f = 0xf;//byte为8位 short g = 0xff;//short为2个字节,16位 System.out.println(Integer.toBinaryString(e)); //11111111 System.out.println(Integer.toBinaryString(f)); // 1111 System.out.println(Integer.toBinaryString(g)); //11111111 } }
判断变量类型
第一种:反射
使用反射的方法: 变量名.getClass().getSimpleName()来判断。这个可以判断科学计数法表示的变量,但需要强转Object类型。
例:
public static void main(String[] args ){ double a = 1e5 + 10; //必须要转成object这样才能用反射判断类型 Object aa = (Object)a; System.out.println( aa.getClass().getSimpleName() ); }
第二种:instanceof
这种也是无法直接判断,需要强转Object
public static void main(String[] args ){ double a = 1e5 + 10; Object aa = (Object)a; //注意这里不要instanceof int会报错,我尝试的时候还以为instance无法判断,后面想到可能是包装类的问题 System.out.println( (aa instanceof Integer )); }
结果:
参考:
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 无需6万激活码!GitHub神秘组织3小时极速复刻Manus,手把手教你使用OpenManus搭建本
· C#/.NET/.NET Core优秀项目和框架2025年2月简报
· Manus爆火,是硬核还是营销?
· 终于写完轮子一部分:tcp代理 了,记录一下
· Qt个人项目总结 —— MySQL数据库查询与断言