0
点赞
收藏
分享

微信扫一扫

JAVA对double或者float的浮点数精度计算控制方法

Python芸芸 2022-12-07 阅读 195


1. package com.soft4j.utility;     
2.
3. import java.math.BigDecimal;
4.
5. /**
6. * 与小数位精度(四舍五入等)相关的一些常用工具方法.
7. *
8. * float/double的精度取值方式分为以下几种: <br>
9. * java.math.BigDecimal.ROUND_UP <br>
10. * java.math.BigDecimal.ROUND_DOWN <br>
11. * java.math.BigDecimal.ROUND_CEILING <br>
12. * java.math.BigDecimal.ROUND_FLOOR <br>
13. * java.math.BigDecimal.ROUND_HALF_UP<br>
14. * java.math.BigDecimal.ROUND_HALF_DOWN <br>
15. * java.math.BigDecimal.ROUND_HALF_EVEN <br>
16. *
17. * @author stephen
18. * @version 1.0.0
19. */
20. public final class RoundTool {
21.
22. /**
23. * 对double数据进行取精度.
24. * <p>
25. * For example: <br>
26. * double value = 100.345678; <br>
27. * double ret = round(value,4,BigDecimal.ROUND_HALF_UP); <br>
28. * ret为100.3457 <br>
29. *
30. * @param value
31. * double数据.
32. * @param scale
33. * 精度位数(保留的小数位数).
34. * @param roundingMode
35. * 精度取值方式.
36. * @return 精度计算后的数据.
37. */
38. public static double round(double value, int scale, int roundingMode) {
39. new BigDecimal(value);
40. bd = bd.setScale(scale, roundingMode);
41. double d = bd.doubleValue();
42. null;
43. return d;
44. }
45.
46. /**
47. * 测试用的main方法.
48. *
49. * @param argc
50. * 运行参数.
51. */
52. public static void main(String[] argc) {
53. //下面都以保留2位小数为例
54.
55. //ROUND_UP
56. //只要第2位后面存在大于0的小数,则第2位就+1
57. 12.3401,2,BigDecimal.ROUND_UP));//12.35
58. 12.3401,2,BigDecimal.ROUND_UP));//-12.35
59. //ROUND_DOWN
60. //与ROUND_UP相反
61. //直接舍弃第2位后面的所有小数
62. 12.349,2,BigDecimal.ROUND_DOWN));//12.34
63. 12.349,2,BigDecimal.ROUND_DOWN));//-12.34
64. //ROUND_CEILING
65. //如果数字>0 则和ROUND_UP作用一样
66. //如果数字<0 则和ROUND_DOWN作用一样
67. 12.3401,2,BigDecimal.ROUND_CEILING));//12.35
68. 12.349,2,BigDecimal.ROUND_CEILING));//-12.34
69. //ROUND_FLOOR
70. //如果数字>0 则和ROUND_DOWN作用一样
71. //如果数字<0 则和ROUND_UP作用一样
72. 12.349,2,BigDecimal.ROUND_FLOOR));//12.34
73. 12.3401,2,BigDecimal.ROUND_FLOOR));//-12.35
74. //ROUND_HALF_UP [这种方法最常用]
75. //如果第3位数字>=5,则第2位数字+1
76. //备注:只看第3位数字的值,不会考虑第3位之后的小数的
77. 12.345,2,BigDecimal.ROUND_HALF_UP));//12.35
78. 12.3449,2,BigDecimal.ROUND_HALF_UP));//12.34
79. 12.345,2,BigDecimal.ROUND_HALF_UP));//-12.35
80. 12.3449,2,BigDecimal.ROUND_HALF_UP));//-12.34
81. //ROUND_HALF_DOWN
82. //如果第3位数字>=5,则做ROUND_UP
83. //如果第3位数字<5,则做ROUND_DOWN
84. 12.345,2,BigDecimal.ROUND_HALF_DOWN));//12.35
85. 12.3449,2,BigDecimal.ROUND_HALF_DOWN));//12.34
86. 12.345,2,BigDecimal.ROUND_HALF_DOWN));//-12.35
87. 12.3449,2,BigDecimal.ROUND_HALF_DOWN));//-12.34
88. //ROUND_HALF_EVEN
89. //如果第3位是偶数,则做ROUND_HALF_DOWN
90. //如果第3位是奇数,则做ROUND_HALF_UP
91. 12.346,2,BigDecimal.ROUND_HALF_EVEN));//12.35
92. 12.345,2,BigDecimal.ROUND_HALF_EVEN));//12.35
93. }
94. }


举报

相关推荐

0 条评论