java自定义实现数值的四舍五入

简介:

java自定义实现数值的四舍五入


问题引入:

   javaMath类提供的rint()和round()方法,提供了对数值进行舍入的处理,其方法如下:

rint(double a)返回最接近参数并等于某一整数的double值。

round(double a)返回最接近参数的long
      round(float a)返回最接近参数的int
   可这三个方法并不能满足实际应用中的所有需要,因此需要自定义一个类实现四舍五入的功能。

           
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
public  class  RoundTool {
     //value 进行四舍五入的数值,dotNum 保留的小数位数
     public  static  String round( double  value,  int  dotNum) {
         String strValue = String.valueOf(value);
         int  pos = strValue.indexOf( "." );     //小数点的位置
         int  len = strValue.length();         //数值的总位数
         int  dotLen = len - pos -  1 ;          //实际小数的位数
         String endNum =  "" ;          //最后返回的字符串    
if  (dotNum < dotLen) {  // 需要保留的小数位数少于实际的小数位数,即小数有多
             String c = strValue.substring(pos + dotNum +  1 , pos + dotNum +  2 );  // 获得保留小数位的下一位,对其进行四舍五入
             int  cNum = Integer.parseInt(c);  // 转换为整数
             double  tempValue = Double.parseDouble(strValue);  // 保留运算结果的中间变量
             if  (cNum >=  5 ) {  // cNum>=5,进位处理(保留小数位的最后一位加1),若保留两位,则加上0.01
                 String tempDot =  "" ;
                 for  ( int  i =  0 ; i < dotNum -  1 ; i++) {
                     tempDot = tempDot +  "0" ;
                 }
                 tempDot =  "0."  + tempDot +  "1" // 需要进位的小数值
                 tempValue = tempValue + Double.parseDouble(tempDot);
                 strValue = String.valueOf(tempValue);  // 进位后的值转换为字符串
                 endNum = strValue.substring( 0 , strValue.indexOf( "." ) + dotNum +  1 );
             else  // cNum<5,直接截取
                 endNum = strValue.substring( 0 , strValue.indexOf( "." ) + dotNum +  1 );
             }
         else  if  (dotNum == dotLen) {  // 需要保留的小数位数与实际的小数位数相等
             endNum = String.valueOf(value);
         else  // 需要保留的小数位数大于实际的小数位数相等
             for  ( int  i =  0 ; i <= dotNum - dotLen -  1 ; i++) {
                 strValue = strValue +  "0" // 补“0”
             }
             endNum = strValue;  // 最终的值
         }
         return  endNum;
     }
     public  static  void  main(String[] args) {
         System.out.println( "数值123.121保留两位小数:\t"  + RoundTool.round( 123.121 2 ));
         System.out.println( "数值123.456789保留3位小数:\t"  + RoundTool.round( 123.456789 3 ));
         System.out.println( "数值123.1231保留3位小数:\t"  + RoundTool.round( 123.1231 3 ));
         System.out.println( "数值123.5保留3位小数:\t"  + RoundTool.round( 123.5 3 ));
     }
}

       

180143269.png




本文转自peiquan 51CTO博客,原文链接:http://blog.51cto.com/peiquan/1270459


相关文章
|
1月前
|
Java Spring 容器
【Java】Spring如何扫描自定义的注解?
【Java】Spring如何扫描自定义的注解?
34 0
|
4月前
|
Java
2048. 下一个更大的数值平衡数 --力扣 --JAVA
如果整数  x 满足:对于每个数位 d ,这个数位 恰好 在 x 中出现 d 次。那么整数 x 就是一个 数值平衡数 。 给你一个整数 n ,请你返回 严格大于 n 的 最小数值平衡数 。 0 <= n <= 106
118 3
|
7天前
|
Java
Java配置大揭秘:读取自定义配置文件的绝佳指南
Java配置大揭秘:读取自定义配置文件的绝佳指南
11 0
Java配置大揭秘:读取自定义配置文件的绝佳指南
|
11天前
|
NoSQL Java Redis
Java自定义线程池的使用
Java自定义线程池的使用
|
30天前
|
Java
java 自定义注解 实现限流
java 自定义注解 实现限流
10 1
|
1月前
|
Java 网络安全 开发者
【Docker】5、Dockerfile 自定义镜像(镜像结构、Dockerfile 语法、把 Java 项目弄成镜像)
【Docker】5、Dockerfile 自定义镜像(镜像结构、Dockerfile 语法、把 Java 项目弄成镜像)
41 0
|
2月前
|
Java
[Java]自定义注解
[Java]自定义注解
43 0
|
3月前
|
Java Maven
java使用apache-commons-lang3生成随机字符串(可自定义规则、RandomUtils
java使用apache-commons-lang3生成随机字符串(可自定义规则、RandomUtils
67 0
|
3月前
|
Java Go C++
Rust每日一练(Leetday0024) 爬楼梯、简化路径、编辑距离
Rust每日一练(Leetday0024) 爬楼梯、简化路径、编辑距离
36 0
Rust每日一练(Leetday0024) 爬楼梯、简化路径、编辑距离
|
3月前
|
Java
用java写一个自定义异常
用java写一个自定义异常
14 1