float和int,float变int
1.Java的简单类型及其包装类
Java简单类型和包类
我们知道Java语言是典型的支持面向对象的程序语言,但考虑到一些基本数据类型具有结构简单、占用内存、访问速度快等优点,Java仍然不是这些面向对象的当然,Java在提供大量其他类时,也会提供与简单数据类型相对应的封装类。 因此,Java有不同的数据类型,如int和integer (浮动和浮动、双精度和双精度…)。
Java语言的数据类型有两种:简单类型、主类型和引用类型。 简单类型的变量包含特定值,而引用类型的变量包含对对象的引用。
Java为每个简单的类型确定大小。 这些大小并不随机器结构的变化而变化。 此大小的不可更改性是Java程序具有很好的可移植性的原因之一。
下表介绍了Java中定义的简单类型、占用的二进制位数以及相应的软件包类列表。
表Java的简单类型
简单型booleanbytecharshortintlongfloatdoublevoid
二进制1 8 16 16 32 64 32 64 --
封装类booleanbytecharactershortintegerlongfloatdoublevoid
为什么要使用包装类
以int和Integer为例,它们本质上都表示32位整数,但数据类型不同。 实际上,Java中直接使用的所有整数都是int,对于int和Integer,只有在数据必须显示为对象时,才需要在启用了int的包装器Intege中将整数值封装到对象中。
例如,要使3360将整数添加到java.util包中的向量中,必须将整数值封装到Integer实例中的:中,如下所示
Vector v=new Vector (;
int k=121;
v.addelemt (新integer ) k );
另外,Integer作为支持int的封装类,提供了:Integer的构建方法、从Integer向其他各种数值型的转换方法等int型数据中没有的很多方法。
2 .简单数据类型之间的转换
简单类型数据之间的转换有两种方法:自动转换和强制转换。 通常在传递表达式或方法的参数时发生。
自动转换
具体而言,将“小”数据和“大”数据一起运算时,“小”数据会自动转换为“大”数据后进行运算。 另一方面,在方法调用时,实际参数为“小”,而在调用的方法的形式参数数据为“大”的情况下(如果有匹配的,则当然直接调用匹配的方法),系统自动当然,对于具有相同名称的多个重载方法,将其转换为“最近”“较大”方法
这些类型从“小”到“大”分别为(字节、短、字符) (int----long----float )双精度)。 这里的“大”和“小”表示值范围的大小,而不是占用多少字节。
看看下面的例子。
以下语句可以直接通过Java。
字节b;
int i=b;
龙格l=b;
float f=b;
双精度d=b;
下位型为char型时,变换为上位型(整数型)后,将变换为对应的ASCII码值。 范例
char c='c ';
int i=c;
system.out.println(output: ) I;
输出: output:99;
对于byte、short和char这三种类型,它们是平整级别的,不能相互自动转换。 可以使用以下强制类型转换。
短整型=99;
charc=(char ) I;
system.out.println(output: ) c;
输出: output:c;
如果对象多态性有方法:
f(bytex(… (. );
f(shortx(…);
f(intx(…);
f(longx(… (. );
f(floatx(…});
f (双精度(…);
另外: chary=’a’; 那么,语句f(y )调用哪个方法? 答案是:f(intx )……)方法。 因为形参比实参“大”,最“近”。
关于方法:
f(floatx(…});
f (双精度(…);
另外,long y=123L; 那么,语句f(y )调用的方法是f ) f(float x )…}。
强制转换
将
“大”数据转换为“小”数据时,你可以使用强制类型转换。即你必须采用下面这种语句格式:int n=(int)3.14159/2;
可以想象,这种转换肯定可能会导致溢出或精度的下降。
注:
①当字节类型变量参与运算,java作自动数据运算类型的提升,将其转换为int类型。
byte b;
b=3;
b=(byte)(b*3);//必须声明byte。
②带小数的变量默认为double类型。
float f;
f=1.3f;//必须声明f。
⑶包装类过渡类型转换
一般情况下,我们首先声明一个变量,然后生成一个对应的包装类,就可以利用包装类的各种方法进行类型转换了。例如:
①当希望把float型转换为double型时:
float f1=100.00f;
Float F1=new Float(f1);
double d1=F1.doubleValue();//F1.doubleValue()为Float类的返回double值型的方法
②当希望把double型转换为int型时:
double d1=100.00;
Double D1=new Double(d1);
int i1=D1.intValue();
简单类型的变量转换为相应的包装类,可以利用包装类的构造函数。即:Boolean(boolean value)、Character(char value)、Integer(int value)、Long(long value)、Float(float value)、Double(double value)
而在各个包装类中,总有形为××Value()的方法,来得到其对应的简单类型数据。利用这种方法,也可以实现不同数值型变量间的转换,例如,对于一个双精度实型类,intValue()可以得到其对应的整型变量,而doubleValue()可以得到其对应的双精度实型变量。
3.字符串与其它类型间的转换
⑴其它类型向字符串的转换
①调用类的串转换方法:X.toString();
②自动转换:X+“”;
③使用String的方法:String.volueOf(X);
⑵字符串作为值,向其它类型的转换
①先转换成相应的封装器实例,再调用对应的方法转换成其它类型
例如,字符中“32.1”转换double型的值的格式为:new Float(“32.1”).doubleValue()。也可以用:Double.valueOf(“32.1”).doubleValue()
②静态parseXXX方法
String s = "1";
byte b = Byte.parseByte( s );
short t = Short.parseShort( s );
int i = Integer.parseInt( s );
long l = Long.parseLong( s );
Float f = Float.parseFloat( s );
Double d = Double.parseDouble( s );
③Character的getNumericValue(char ch)方法
具体可查阅api。
再分享 java.lang.math 中的几个函数:
四舍五入:
static long round(double a)
Returns the closest long to the argument.
static int round(float a)
Returns the closest int to the argument.
下取整:
static double ceil(double a)
Returns the smallest (closest to negative infinity) double value that is not less than the argument and is equal to a mathematical integer.
上取整:
static double floor(double a)
Returns the largest (closest to positive infinity) double value that is not greater than the argument and is equal to a mathematical integer.
例如:
import java.lang.*;
public class quzheng{
public static void main(String args[]){
//四舍五入
System.out.println(Math.round(3.40d));
System.out.println(Math.round(3.60d));
System.out.println(Math.round(3.40f));
System.out.println(Math.round(3.60f));
//上取整
System.out.println(Math.ceil(3.4));
System.out.println(Math.ceil(3.6));
//下取整
System.out.println(Math.floor(3.40));
System.out.println(Math.floor(3.60));
}
}
结果为:
3
4
3
4
4.0
4.0
3.0
3.0