- 浏览: 829484 次
- 性别:
- 来自: 哈尔滨
文章分类
最新评论
-
doloveme:
$sudo cp MONACO_Linux.ttf /usr/ ...
terminator 的配置 -
腾讯rep:
lowser
RSA加密算法c++简单实现 -
csuhanyong:
好YD啊,好YD
一图流:机械键盘各轴区别 -
doloveme:
1。其中:extman ,extmail下载http://ww ...
Ubuntu下安装postfix+extmail邮件服务器 -
doloveme:
repo sync出现“fatal: '../platform ...
Android 编译环境配置搭建(Ubuntu 12.04)及环境导致编译错误QA
★★★ 本篇为原创,需要引用转载的朋友请注明:《 http://stephen830.iteye.com/blog/260776 》 谢谢支持!★★★
本篇介绍了在JAVA中如何对double或者float的浮点数进行精度计算,在JAVA中提供了多种参数来实现精度的不同控制方式。具体例子如下:
- /*
- * Created on 2005-6-5
- * Author stephen
- * Email zhoujianqiang AT gmail DOT com
- * CopyRight(C)2005-2008 , All rights reserved.
- */
- package com.soft4j.utility;
- import java.math.BigDecimal;
- /**
- * 与小数位精度(四舍五入等)相关的一些常用工具方法.
- *
- * float/double的精度取值方式分为以下几种: <br>
- * java.math.BigDecimal.ROUND_UP <br>
- * java.math.BigDecimal.ROUND_DOWN <br>
- * java.math.BigDecimal.ROUND_CEILING <br>
- * java.math.BigDecimal.ROUND_FLOOR <br>
- * java.math.BigDecimal.ROUND_HALF_UP<br>
- * java.math.BigDecimal.ROUND_HALF_DOWN <br>
- * java.math.BigDecimal.ROUND_HALF_EVEN <br>
- *
- * @author stephen
- * @version 1.0.0
- */
- public final class RoundTool {
- /**
- * 对double数据进行取精度.
- * <p>
- * For example: <br>
- * double value = 100.345678; <br>
- * double ret = round(value,4,BigDecimal.ROUND_HALF_UP); <br>
- * ret为100.3457 <br>
- *
- * @param value
- * double数据.
- * @param scale
- * 精度位数(保留的小数位数).
- * @param roundingMode
- * 精度取值方式.
- * @return 精度计算后的数据.
- */
- public static double round(double value, int scale, int roundingMode) {
- BigDecimal bd = new BigDecimal(value);
- bd = bd.setScale(scale, roundingMode);
- double d = bd.doubleValue();
- bd = null;
- return d;
- }
- /**
- * 测试用的main方法.
- *
- * @param argc
- * 运行参数.
- */
- public static void main(String[] argc) {
- //下面都以保留2位小数为例
- //ROUND_UP
- //只要第2位后面存在大于0的小数,则第2位就+1
- System.out.println(round(12.3401,2,BigDecimal.ROUND_UP));//12.35
- System.out.println(round(-12.3401,2,BigDecimal.ROUND_UP));//-12.35
- //ROUND_DOWN
- //与ROUND_UP相反
- //直接舍弃第2位后面的所有小数
- System.out.println(round(12.349,2,BigDecimal.ROUND_DOWN));//12.34
- System.out.println(round(-12.349,2,BigDecimal.ROUND_DOWN));//-12.34
- //ROUND_CEILING
- //如果数字>0 则和ROUND_UP作用一样
- //如果数字<0 则和ROUND_DOWN作用一样
- System.out.println(round(12.3401,2,BigDecimal.ROUND_CEILING));//12.35
- System.out.println(round(-12.349,2,BigDecimal.ROUND_CEILING));//-12.34
- //ROUND_FLOOR
- //如果数字>0 则和ROUND_DOWN作用一样
- //如果数字<0 则和ROUND_UP作用一样
- System.out.println(round(12.349,2,BigDecimal.ROUND_FLOOR));//12.34
- System.out.println(round(-12.3401,2,BigDecimal.ROUND_FLOOR));//-12.35
- //ROUND_HALF_UP [这种方法最常用]
- //如果第3位数字>=5,则第2位数字+1
- //备注:只看第3位数字的值,不会考虑第3位之后的小数的
- System.out.println(round(12.345,2,BigDecimal.ROUND_HALF_UP));//12.35
- System.out.println(round(12.3449,2,BigDecimal.ROUND_HALF_UP));//12.34
- System.out.println(round(-12.345,2,BigDecimal.ROUND_HALF_UP));//-12.35
- System.out.println(round(-12.3449,2,BigDecimal.ROUND_HALF_UP));//-12.34
- //ROUND_HALF_DOWN
- //如果第3位数字>=5,则做ROUND_UP
- //如果第3位数字<5,则做ROUND_DOWN
- System.out.println(round(12.345,2,BigDecimal.ROUND_HALF_DOWN));//12.35
- System.out.println(round(12.3449,2,BigDecimal.ROUND_HALF_DOWN));//12.34
- System.out.println(round(-12.345,2,BigDecimal.ROUND_HALF_DOWN));//-12.35
- System.out.println(round(-12.3449,2,BigDecimal.ROUND_HALF_DOWN));//-12.34
- //ROUND_HALF_EVEN
- //如果第3位是偶数,则做ROUND_HALF_DOWN
- //如果第3位是奇数,则做ROUND_HALF_UP
- System.out.println(round(12.346,2,BigDecimal.ROUND_HALF_EVEN));//12.35
- System.out.println(round(12.345,2,BigDecimal.ROUND_HALF_EVEN));//12.35
- }
- }
发表评论
-
JAVA代码混淆
2016-05-05 18:24 1453JAVA代码混淆 <!--[if !supportL ... -
android 监听状态栏被下拉
2015-12-25 17:23 3478Activity的onWindowFocusChange()方 ... -
android使用mount挂载/system/app为读写权限,删除或替换系统应用
2015-11-27 14:13 4030注意:以下代码中#开头的则为需要执行的shell命令,其他的 ... -
Ubuntu 14.04 文件服务器--samba的安装和配置
2015-11-10 10:49 640jingyan.baidu.com/album/00a07f ... -
intellij 打开工程在每个java文件上 有个红色的无效符
2015-07-24 13:52 1757说明该类不是可编译文件。在project Structure中 ... -
logcat命令详解
2015-07-22 16:34 985Android日志系统提供了记录和查看系统调试信息的功能。日 ... -
gradle打包遇到的错误汇总
2015-07-21 11:32 0错误1:A problem occurred ... -
SpringMVC入门
2015-07-02 18:23 764目录 介绍 实例 总结 参考资料 介绍 Sp ... -
Android读写XML(下)——创建XML文档
2015-04-29 11:02 618在前面的2篇文章Android读写XML(上)—— pack ... -
Android读写XML(中)——SAX
2015-04-29 10:54 625在Android读写XML(上) ... -
Android读写XML(下)——创建XML文档
2015-04-29 10:52 704在前面的2篇文章Android读写XML(上)—— pack ... -
android:configChanges locale 改语言后,该配置不起作用的原因
2015-03-23 14:38 2518@Override public void on ... -
android.app.Fragment$InstantiationException 解决办法
2015-03-23 13:46 1415android.app.Fragment$Instantia ... -
linux 查看内存
2015-02-10 13:08 7471、free监控内存使用情况 #free 2、watc ... -
android fastboot 刷机 指令
2015-01-19 18:31 1531原生bootloader:bootloader-gro ... -
[Android实例] android中进行https连接的方式的详解 (转发)
2015-01-09 15:50 698x 如果不需要验证服务器端证书, ... -
编译android源码apk是否生成odex方法
2014-10-20 17:19 1649其实Android系统默认的配置是,如果没有指定DISABL ... -
关于android源码中的APP编译时引用隐藏的API出现的问题
2014-10-20 15:36 844今天在编译android源码中的计算器APP时发现,竟然无法 ... -
Android系统进程Zygote启动过程的源代码分析
2014-09-17 10:09 506在Android系统中, ... -
Handler和HandlerThread
2014-09-16 16:58 6971.什么是Handler? SDK中关于Handler的说 ...
相关推荐
Java中的简单浮点数类型float和double不能够进行运算,因为大多数情况下是正常的,但是偶尔会出现如上所示的问题。这个问题其实不是JAVA的bug,因为计算机本身是二进制的,而浮点数实际上只是个近似值,所以从二进制...
标题中的"Java 精确计算 - double-float-String"指向的是Java中处理浮点数(double和float)以及字符串表示的数值时可能遇到的精度问题,以及如何通过特定方法实现精确计算。描述中提到的链接指向了一个具体的博客...
在计算机科学领域中,浮点数的表示方式至关重要,尤其是在处理科学计算、图形渲染等对精度有较高要求的应用场景中。IEEE 754标准定义了一种广泛使用的浮点数表示方法,它被用于大多数现代处理器上。本文将详细探讨...
`double`类型的精度更高,通常用于需要高精度计算的场景。 #### 1.2 文件读取机制 在Java中,文件读取通常涉及到输入流(`InputStream`),其中`FileInputStream`是用于读取文件中字节流的具体类。然而,直接使用`...
在Java中,浮点数(float和double)是基于IEEE 754标准的,它们使用二进制浮点表示法,这导致在进行除法、乘法、加法和减法等操作时可能会出现非预期的精度损失。例如,两个看似相等的浮点数在计算后可能因为舍入...
在Java中,浮点数有两种主要形式:单精度浮点数(float)和双精度浮点数(double),它们分别使用32位和64位来存储。 1. **字节序**:在进行16进制到浮点数的转换时,必须考虑到字节序,即字节在内存中的排列顺序。...
这篇博客主要探讨了Java中浮点数(包括`float`和`double`类型)运算的特性、存在的问题以及如何应对这些挑战。 首先,Java中的`float`类型占用32位存储空间,它能表示大约6到7位十进制的有效数字,而`double`类型则...
解决java数值范围以及float与double精度丢失的问题 Java中的数值范围和浮点数精度问题是许多开发者经常遇到的问题。下面我们将详细探讨Java中的数值范围、float和double类型的精度问题,并且提供解决方案。 一、...
而对于对精度要求不那么高的场景,可以使用`float`或`double`,但需谨慎处理可能出现的精度误差。 总之,理解和掌握Java中的浮点数存储和运算特性,以及如何利用`BigDecimal`进行精确计算,是每个Java开发者必备的...
在Java编程中,使用`float`和`double`类型进行浮点数计算时经常会遇到精度丢失的问题。这是因为浮点数在计算机内部是以二进制形式存储的,而某些十进制小数无法用二进制精确表示,从而导致计算结果出现误差。例如,`...
浮点数精度问题主要体现在,当使用float或double类型的数值进行运算时,结果并不总是与预期相符,这主要是由于计算机内部对浮点数的存储方式导致的。 浮点数在计算机内部是以二进制的科学记数法形式存储的。对于一...
浮点数是一种可以表示小数的数值类型,分为单精度(Single-precision)和双精度(Double-precision)。单精度浮点数占用32位二进制空间,由1位符号位、8位指数位和23位尾数位组成。双精度浮点数则占据64位,包括1位...
在Java编程语言中,浮点数类型包括`float`和`double`,它们分别用于存储单精度和双精度浮点数。了解如何在源码级别获取这两种类型的最大和最小值对于编写高效且精确的代码至关重要。本文将深入探讨Java中获取浮点数...
双浮点型(double)是64位的浮点数,提供更高的精度。同样遵循IEEE 754标准,64位数据由1位符号位、11位指数位和52位尾数组成。转换过程类似于32位转浮点,只是涉及的位数更多,计算也更为复杂。 在编程语言如C、...
`float` 是单精度浮点数,占用 4 字节(32 位),而 `double` 是双精度浮点数,占用 8 字节(64 位)。由于 `double` 比 `float` 更精确,所以在大多数情况下推荐使用 `double`。然而,如果内存限制是一个问题,或者...
标题中的“float、double类型介绍”指的是在编程语言中,如C++、Java或Python等,用于表示浮点数的数据类型。浮点数是计算机科学中用来表示小数的一种方式,因为它们不是精确的,而是近似的。浮点类型通常分为两种...
本文将详细解释float和double的范围和精度,及其在商业计算中的应用问题和解决方法。 1. 范围 float和double的范围是由指数的位数来决定的。float的指数位有8位,而double的指数位有11位。因此,float的指数范围为...
浮点数计算错误是计算机科学中的一个经典问题,...总之,理解计算机浮点数表示的原理和它的限制是十分重要的,这可以帮助开发者在编程时更好地处理数值计算,并通过适当的策略来最小化由于浮点数精度限制所引起的误差。
在Java中,浮点数有两种类型:float和double。float是单精度浮点数,占用4个字节,精度约为7位小数;double是双精度浮点数,占用8个字节,精度约为15位小数。由于浮点数在计算机内部是以二进制形式存储的,因此可能...
这里有一个小知识:既然 float 和 double 型用来表示带有小数点的数,那为什么我们不称 它们为“小数”或者“实数”,要叫浮点数呢?因为这些数都以科学计数法的形式存储。当一个数如 50.534,转换成科学计数法的...