Java Float 保留小数位精度的实现
程序员文章站
2022-03-10 13:20:06
目录float 保留小数位精度float 浮点型数据保留两位小数1、decimalformat2、math.round():float 保留小数位精度decimalformat decimalform...
float 保留小数位精度
decimalformat decimalformat=new decimalformat(".00"); return float.valueof(super.getdecimalformat().format(new bigdecimal(handletime)));
float 浮点型数据保留两位小数
用过两种方法:decimalformat和math.round()。
用法:
1、decimalformat
string java.text.numberformat.format(double number)方法
float f = 0.5555f; decimalformat df1 = new decimalformat("#.00");//保留两位小数,如果是零点几,则小数点前的0不显示,小数点后几个零就保留几位 df1.format(f); #表示该位如果是0则不必显示出来,0则表示该位如果是0仍然显示;
函数的定义是:;
所以,传参是double,也可以传float(隐式转换),最后的结果是string类型。
2、math.round():
int java.lang.math.round(float a)方法
float f = 1.222f; f = math.round(f * 100) / 100f;//乘以100,然后除以100转换为浮点类型 /**乘以多少就保留多少位小数 **注意math.round()方法传float类型! */
两种方法都会四舍五入。
如果是浮点类型建议用math.round方法,也可以根据自己需求diy代码。
详细讲解请看代码注释和控制台输出:(包含decimalfloat的格式、math.round函数的实现逻辑)
package testmap; import java.text.decimalformat; public class testfloat { public static void main(string[] args) { // todo auto-generated method stub //四舍五入保留两位 float f = 0.5555f; //decimalformat是将double类型数据转换为字符串,并进行格式化 //#表示这位如果是0则不必显示出来,0则表示这位如果是 //format函数:string java.text.numberformat.format(double number) decimalformat df1 = new decimalformat("#.00");//首位0不显示出来,即0.1显示为 .1 decimalformat df2 = new decimalformat("0.00");//首位0显示出来,即0.1显示为 0.1 system.out.println("--------decimalformat----------"); system.out.println("df1==" + df1.format(f)); system.out.println("df2==" + df2.format(f)); system.out.println(df1.format(f).getclass());//string类型 system.out.println(float.parsefloat(df1.format(f)));//转换为float类型 system.out.println(string.valueof(df1.format(f))); // system.out.println(float.tostring(df1.format(f)));//转换为string类型 f = 0.595f; //math.round()方法是将浮点类型数据 乘以10的多少次方 ,取整,然后 + 0.5 除以10的多少次方,取小数点后多少位 // 如乘以1000 则取小数点后3位 system.out.println("---------math.round()----------"); system.out.println(math.round(f * 100) / 100f);//四舍五入后如果末尾是0,自动省略,不显示 // system.out.println(df1.format("1.2"));//参数必须是数值型string java.text.numberformat.format(double number) system.out.println(float.tostring(f));//转换为string输出效果 system.out.println(float.tostring(f));//转换为string输出效果 system.out.println("-----------math.round()的正数非特殊值实现逻辑--------------"); f = 11.115111f; int b = (int) (f * 100 + 0.5); float a = b / 100f; system.out.println("a==" + a); system.out.println((int)(f * 100 + 0.5) / 100f); f = -12.115f; system.out.println("负数" + math.round(f * 100) / 100f); f = -12.116f; system.out.println("负数" + math.round(f * 100) / 100f); system.out.println("-------math.round()的负数非特殊值实现逻辑--------"); int c = (int) (f * 100 - 0.5); float d = c / 100f; system.out.println("d==" + d); system.out.println((int)(d * 100 - 0.5) / 100f); } }
控制台输出:
截图如下:
----下面的是控制台输出-----(和上面一样的,怕图片丢失)
--------decimalformat----------
df1==.56
df2==0.56
class java.lang.string
0.56
.56
---------math.round()----------
0.6
0.595
0.595
-----------math.round()的正数非特殊值实现逻辑--------------
a==11.12
11.12
负数-12.11
负数-12.12
-------math.round()的负数非特殊值实现逻辑--------
d==-12.12
-12.12
顺便贴上numberformat.formart()的代码:
/** * specialization of format. * * @param number the double number to format * @return the formatted string * @exception arithmeticexception if rounding is needed with rounding * mode being set to roundingmode.unnecessary * @see java.text.format#format */ public final string format(double number) { // use fast-path for double result if that works string result = fastformat(number); if (result != null) return result; return format(number, new stringbuffer(), dontcarefieldposition.instance).tostring(); }
以上为个人经验,希望能给大家一个参考,也希望大家多多支持。
上一篇: Python中引用传参四种方式介绍