- 浏览: 975516 次
- 性别:
- 来自: 重庆
文章分类
- 全部博客 (185)
- 生活感悟 (4)
- Eclipse 插件安装以及应用 (11)
- JAVA 基础 (43)
- 项目经验 (2)
- ubuntu (1)
- javascript (5)
- jquery (1)
- mysql (5)
- 数据库连接池 (2)
- 博文推荐 (13)
- hibernate (6)
- struts (3)
- 开源插件 (5)
- Exception (3)
- Environmental (2)
- ORACLE (9)
- SVN (1)
- 代码管理 (1)
- SAP/BO的Crystal Reports (1)
- 设计模式/原则 (6)
- 服务器 (1)
- mina (0)
- plsql (6)
- Spring (11)
- 网络编程 (1)
- JDBC (3)
- 多线程 (11)
- 智力考场 (8)
- 数据库笔试 (1)
- 框架集合 (3)
- webservice (3)
- 源码赏析 (9)
- 算法和数据结构 (12)
- JVM (7)
- 缓存 (8)
- JMS (7)
- 分布式 (0)
- IO/NIO (2)
- zookeeper (1)
- linux 笔记 (2)
- maven (1)
- soa (1)
- redis (6)
- hadoop (4)
- spark (6)
- 数据可视化 (1)
- scala (0)
- hive (2)
- flink (5)
最新评论
-
Carvendy许:
16/11/18 16:21:17 ERROR SparkDe ...
spark 笔记1 -- spark程序连接 -
谁说长得帅就不爷们:
什么情况下会有 p!=t ?
源码分析-ConcurrentLinkedQueue -
di1984HIT:
spring +ehcache 持久化数据,重启恢复 -
lc464297691:
给个我实现的代码,需要自己写一个类继承之~
public ab ...
JAVA数据库连接池实现 -
lc464297691:
100%发生死锁! if (isValid(conn)) ...
JAVA数据库连接池实现
JAVA 浮点类型的计算,我们知道会出现失精的问题,如果程序中经常使用,我的做法是,写一个工具类,专门处理类似问题。
/** * * @Description:两个double类型相加,返回Double * @createBy:qiqiang ran * @createdate:2012-3-23 * @param double d1 * @param double d2 * @return double */ public static double doubleAdd(double d1, double d2) { BigDecimal a1 = new BigDecimal(d1); BigDecimal b1 = new BigDecimal(d2); return a1.add(b1).doubleValue(); }
那么用BigDecimal 就完全可以解决了吗?我找到这样一句话: Note: the results of this constructor can be somewhat unpredictable.
One might assume that new BigDecimal(.1) is exactly equal to .1,
but it is actually equal to .1000000000000000055511151231257827021181583404541015625.
This is so because .1 cannot be represented exactly as a double (or, for that
matter, as a binary fraction of any finite length).
Thus, the long value that is being passed in to the constructor is not exactly
equal to .1, appearances nonwithstanding.The (String) constructor, on the other hand, is perfectly predictable:
new BigDecimal(".1") is exactly equal to .1, as one would expect. Therefore,
it is generally recommended that the (String) constructor be used in preference
to this one.(转《Effective Java》)
我了解了一下,BigDecimal 有4个构造方法,具体的大家可以去看看,这里强调了是着两个:
BigDecimal(String val){...};
BigDecimal(double val){...};
而我们通常使用的是 构造double val,但是从刚才那段说明中得知:字符串的构造函数优先于另一个。
那么我们现在的方法可以这样改进:
/** * * @Description:两个double类型相加,返回Double * @createBy:qiqiang ran * @createdate:2012-3-23 * @param double d1 * @param double d2 * @return double */ public static double doubleAdd(double d1, double d2) { BigDecimal a1 = new BigDecimal(Double.toString(d1)); BigDecimal b1 = new BigDecimal(Double.toString(d2)); return a1.add(b1).doubleValue(); }
同理可得:我们可以提供相应 - * / 方法,分别对应:.subtract .multiply .div 方法。
注意:运算过程中需要注意参数,以及保留位数,比如:除法运算,里面方法很多,大家可以尝试。
最后:这个以前就遇到过,只是临时copy 过来用用,老是不明白,
后来自己多写写,多领悟好多了,虽然还有很多不明白的地方,
但是相信自己动手 动脑去完成,总会搞清楚的。也给新入行的人提醒,
最好别一味的copy代码,哪怕是上面两行最简单的代码,写一次就深刻一次,
这也是我不将后面方法写完的原因。还有关于JS 计算也有同样的问题,
大家也可以去研究研究。
发表评论
-
jdbc 大数据量下载
2020-03-31 10:45 5751.背景: 常见数据应用里面会有数据 ... -
两个大数字乘法
2019-11-25 21:45 372/** * 默认最大长度50位,可以调节,或者 ... -
源码分析-ConcurrentLinkedQueue
2015-06-02 11:22 5025一.序言 现在并发操作中都要求高效,都在想怎么 ... -
lockInterruptibly 和 lock
2015-05-17 11:19 1477一.序言 ReentrantLock 锁有好几种 ... -
available 的理解和一些使用
2014-04-21 18:49 7823一、序言 这里主要介绍一下我们在读文件流,如 ... -
源码分析--ThreadLocal
2014-03-23 22:15 1907一、序言 这里会分析ThreadLocal ... -
多线程(三)--线程安全与锁
2014-03-13 00:03 17971一、引言: ... -
反射(一)----原理机制和基本运用
2014-02-27 20:26 5016JAVA 反射的应用还 ... -
Java程序员应该了解的10个设计原则
2013-12-30 18:09 1350转自:ht ... -
静态方法加锁,和非静态方法加锁区别
2013-11-13 09:43 25235今天看了到有意思的题:在静态方法上加锁 和 非静态方法加锁 ... -
设计模式-享元模式
2013-10-19 11:59 1398一、介绍 享 ... -
生产者与消费者 模型理解,与简单设计
2013-10-13 23:17 1609题外话:从中秋请假到现在,接近20天的假期,让我彻底耍晕了 ... -
排序算法(四)--快速排序
2013-09-17 16:15 1669package sort; import java. ... -
排序算法(三)--选择排序
2013-09-12 14:02 1474package sort; import ja ... -
排序算法(二)--插入排序
2013-09-09 11:10 997/** * 插入排序 复杂度:N^2 * 原理:默 ... -
排序算法(一)--冒泡排序
2013-09-08 15:55 1638/** * 冒泡算法 复杂度:N^2 * 原理: ... -
排序算法(0)--初步设计
2013-09-08 13:48 1602最近复习了下,基本算法,发现会写,但是在应用上还是不好,也 ... -
JAVA 深入集合-- ArrayList
2013-09-06 21:51 1448一、介绍 ArrayList ... -
Java深入集合--linkedHashMap
2013-08-28 00:23 7080LinkedHashMap 源码介绍 一、介绍: ... -
Java 深入集合--HashMap
2013-08-18 21:48 2132一、HashMap介绍: 上面一篇介绍了ha ...
相关推荐
"Java中的精确计算方法" Java语言中,浮点数是一种常用的数值类型,但是它并不是非常精确的。浮点数的计算结果可能会出现舍入误差,导致结果不符合预期。这种情况在金融计算、科学计算等领域中尤其重要。 IEEE 754...
【Java浮点型计算器】是一个基于Java编程语言开发的图形用户界面(GUI)应用程序,它提供了基本的数学运算,包括加法、减法、乘法和除法,针对浮点数进行计算。浮点型计算器的主要特点在于处理带有小数部分的数值,...
介绍:strictfp 修饰的类中所有的方法都隐藏了 strictfp 修饰词,方法执行的所有浮点计算遵守 IEEE 754 标准,所有取值包括中间的结果都必须表示为 float 或 double 类型,而不能利用由本地平台浮点格式或硬件提供的...
本文将深入探讨Java中实现数值计算的方法、工具和最佳实践。 首先,我们要理解Java的基础数据类型,包括整型(byte, short, int, long)、浮点型(float, double)以及它们在数值计算中的应用。Java的数据类型提供...
这是因为Java中的`float`和`double`类型基于二进制浮点表示,可能会导致精度损失,特别是在涉及货币或高精度计算的场景下。`BigDecimal`通过使用字符串或整数构造,可以确保数值的精确表示。 1. 创建`BigDecimal`...
本主题将深入探讨这些知识点,帮助开发者掌握在Java环境中进行复杂计算的方法。 1. **基本数据类型与运算符**:Java提供了八种基本数据类型,包括整型(byte, short, int, long)、浮点型(float, double)以及布尔...
`String`是Java中最常用的引用类型之一,用于表示文本字符串。`String`类是不可变的,意味着一旦创建了一个`String`对象,其内容就不能被改变。 - **String类的方法**: - `charAt(int index)`:返回指定索引处的...
1. **基础语法**:了解基本的数据类型(如整型、浮点型、字符型、布尔型),变量的声明与赋值,运算符(算术、比较、逻辑、位运算符)的使用,流程控制语句(如if-else、switch、for、while等)。 2. **类与对象**...
然而,这个方法在处理负数时会出现错误,因为Java中的取模运算符对负数的处理不同于我们的直觉。根据Java的定义,`(a % b)` 的结果与 `a` 有相同的符号,这意味着当 `i` 是一个负奇数时,`i % 2` 实际上会得到 `-1`...
4. 浮点类:Java的浮点类型包括`float`和`double`,其中`double`是默认的浮点类型。`float`占32位,`double`占64位,提供更大的精度。浮点数可以使用小数点或科学计数法表示。例如: ```java float floatValue = 123...
Java 中有两种浮点类型:float 和 double。 四、基本数据类型 * 基本数据类型包括整型、浮点类型、字符型和布尔类型。 * 整型包括 byte、short、int、long四种,通常情况下,int 类型是最常用的。 * 浮点类型包括 ...
- `double`: 占用8个字节(64位),精度约为15位十进制数字,是Java中的默认浮点类型。 3. **字符型数据类型**: - `char`: 占用2个字节(16位),使用Unicode编码,可以表示从'\u0000'到'\uffff'的字符,即65536个...
在Java编程中,Double类型的数值比较是一个常见的操作,但与我们通常处理整数或浮点数的方式略有不同。本文将详细探讨如何正确地比较Java中的Double类型数值。 首先,了解`Double`类型在Java中的定义至关重要。`...
3. **`java.math`** 包:提供了大整数(BigInteger)和大浮点数(BigDecimal)类,用于处理超出普通浮点类型精度的计算。 4. **Apache Commons Math**:这是一个强大的开源库,提供了广泛的数值计算功能,包括线性...
"Java计算工具类"就是这样的一个类,它包含了用于基本数学运算的方法,如类型转换以及加、减、乘、除等操作。下面我们将详细讨论这个类可能包含的知识点。 1. **类型转换**: Java中的类型转换是将一种数据类型...
首先,"java基本数据类型A.xmind"和"java基本数据类型B.xmind"这两张思维导图主要介绍了Java中的八种基本数据类型,包括整型(byte, short, int, long)、浮点型(float, double)、字符型(char)以及布尔型...
3. **掌握数据类型和结构**:能够熟练使用Java提供的各种数据类型(如整型、浮点型、布尔型等),以及如何组织这些数据(如数组、字符串等)。 4. **掌握基本编程技术**:具备编写简单Java程序的能力,包括基本输入...
基本数据类型包括整数类型(byte、short、int、long)、字符类型(char)和浮点类型(float、double),以及布尔类型(boolean)。在Java中,整数的默认类型是int,浮点数的默认类型是double。由于Java是面向对象的...