原因
之前用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实现方式。
(详情请看文末的参考)
判断变量类型
第一种:反射
使用反射的方法: 变量名.getClass().getSimpleName()来判断。这个可以判断科学计数法表示的变量,但需要强转Object。
例:
public static void main(String[] args ){
double a = 1e5 + 10;
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 ));
}
结果:
参考:
- 科学计数法
- 判断变量类型
来源:https://www.cnblogs.com/CodeWater404/p/15988982.html
本站部分图文来源于网络,如有侵权请联系删除。