java保留两位小数方法1> BigDecimal 方法
double f = 11.3156; BigDecimal b = new BigDecimal(f); f = b.setScale(2,BigDecimal.ROUND_HALF_UP).doubleValue();
2> DecimalFormat 格式化
double f=2.23412; System.out.println(new DecimalFormat("#.00").format(f));
DecimalFormat format 方法格式中的'0'和'#'的区别eg: 1:new DecimalFormat("00.000").format(pi) //结果:03.142 2:new DecimalFormat("##.###").format(pi) //结果:3.142都是对pi进行格式化,但第一个的结果是03.142,第二个的结果是3.142。0和#都是占位符,但在不同的地方,作用不一样。下面对他们做了具体的比较。0: 比实际数字的位数多,不足的地方用0补上。 new DecimalFormat("00.00").format(3.14) //结果:03.14 new DecimalFormat("0.000").format(3.14) //结果: 3.140 new DecimalFormat("00.000").format(3.14) //结果:03.140 比实际数字的位数少:整数部分不改动,小数部分,四舍五入 new DecimalFormat("0.000").format(13.146) //结果:13.146 new DecimalFormat("00.00").format(13.146) //结果:13.15 new DecimalFormat("0.00").format(13.146) //结果:13.15#: 比实际数字的位数多,不变。 new DecimalFormat("##.##").format(3.14) //结果:3.14 new DecimalFormat("#.###").format(3.14) //结果: 3.14 new DecimalFormat("##.###").format(3.14) //结果:3.14 比实际数字的位数少:整数部分不改动,小数部分,四舍五入 new DecimalFormat("#.###").format(13.146) //结果:13.146 new DecimalFormat("##.##").format(13.146) //结果:13.15 new DecimalFormat("#.##").format(13.146) //结果:13.15
3> String 方法
double f = 11.3156; String s = String .format("%.2f",f); f = Double.valueOf(s);
System.out.println(f);
short s1 = 1; s1 = s1 + 1;有错吗?short s1 = 1; s1 += 1;有错吗?答:对于short s1 = 1; s1 = s1 + 1;由于1是int类型,因此s1+1运算结果也是int 型,需要强制转换类型才能赋值给short型。而short s1 = 1; s1 += 1;可以正确编译,因为s1+= 1;相当于s1 = (short)(s1 + 1);其中有隐含的强制类型转换。
用最有效率的方法计算2乘以8?答: 2 << 3(左移3位相当于乘以2的3次方,右移3位相当于除以2的3次方)。解析:java中有三种移位运算符:<< : 左移运算符,num << 1,相当于num乘以2>> : 右移运算符,num >> 1,相当于num除以2>>> : 无符号右移,忽略符号位,空位都以0补齐
String和StringBuilder、StringBuffer的区别?答:Java平台提供了两种类型的字符串:String和StringBuffer/StringBuilder,它们可以储存和操作字符串。其中String是只读字符串,也就意味着String引用的字符串内容是不能被改变的。而StringBuffer/StringBuilder类表示的字符串对象可以直接进行修改。StringBuilder是Java 5中引入的,它和StringBuffer的方法完全相同,区别在于它是在单线程环境下使用的,因为它的所有方面都没有被synchronized修饰,因此它的效率也比StringBuffer要高。
String和StringBuilder、StringBuffer的区别?答:Java平台提供了两种类型的字符串:String和StringBuffer/StringBuilder,它们可以储存和操作字符串。其中String是只读字符串,也就意味着String引用的字符串内容是不能被改变的。而StringBuffer/StringBuilder类表示的字符串对象可以直接进行修改。StringBuilder是Java 5中引入的,它和StringBuffer的方法完全相同,区别在于它是在单线程环境下使用的,因为它的所有方面都没有被synchronized修饰,因此它的效率也比StringBuffer要高。
什么情况下用+运算符进行字符串连接比调用StringBuffer/StringBuilder对象的append方法连接字符串性能更好?答:如果使用少量的字符串操作,使用 (+运算符)连接字符串;如果频繁的对大量字符串进行操作,则使用1:全局变量或者需要多线程支持则使用StringBuffer;2:局部变量或者单线程不涉及线程安全则使有StringBuilder。补充:String对象的intern方法会得到字符串对象在常量池中对应的版本的引用(如果常量池中有一个字符串与String对象的equals结果是true),如果常量池中没有对应的字符串,则该字符串将被添加到常量池中,然后返回常量池中字符串的引用。
转载于:https://www.cnblogs.com/wyu1258/p/8688112.html