- 浏览: 966255 次
- 性别:
- 来自: 重庆
文章分类
- 全部博客 (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 4761.背景: 常见数据应用里面会有数据 ... -
两个大数字乘法
2019-11-25 21:45 310/** * 默认最大长度50位,可以调节,或者 ... -
源码分析-ConcurrentLinkedQueue
2015-06-02 11:22 4941一.序言 现在并发操作中都要求高效,都在想怎么 ... -
lockInterruptibly 和 lock
2015-05-17 11:19 1435一.序言 ReentrantLock 锁有好几种 ... -
available 的理解和一些使用
2014-04-21 18:49 7740一、序言 这里主要介绍一下我们在读文件流,如 ... -
源码分析--ThreadLocal
2014-03-23 22:15 1871一、序言 这里会分析ThreadLocal ... -
多线程(三)--线程安全与锁
2014-03-13 00:03 17917一、引言: ... -
反射(一)----原理机制和基本运用
2014-02-27 20:26 4967JAVA 反射的应用还 ... -
Java程序员应该了解的10个设计原则
2013-12-30 18:09 1319转自:ht ... -
静态方法加锁,和非静态方法加锁区别
2013-11-13 09:43 25171今天看了到有意思的题:在静态方法上加锁 和 非静态方法加锁 ... -
设计模式-享元模式
2013-10-19 11:59 1358一、介绍 享 ... -
生产者与消费者 模型理解,与简单设计
2013-10-13 23:17 1576题外话:从中秋请假到现在,接近20天的假期,让我彻底耍晕了 ... -
排序算法(四)--快速排序
2013-09-17 16:15 1630package sort; import java. ... -
排序算法(三)--选择排序
2013-09-12 14:02 1409package sort; import ja ... -
排序算法(二)--插入排序
2013-09-09 11:10 957/** * 插入排序 复杂度:N^2 * 原理:默 ... -
排序算法(一)--冒泡排序
2013-09-08 15:55 1591/** * 冒泡算法 复杂度:N^2 * 原理: ... -
排序算法(0)--初步设计
2013-09-08 13:48 1557最近复习了下,基本算法,发现会写,但是在应用上还是不好,也 ... -
JAVA 深入集合-- ArrayList
2013-09-06 21:51 1417一、介绍 ArrayList ... -
Java深入集合--linkedHashMap
2013-08-28 00:23 7012LinkedHashMap 源码介绍 一、介绍: ... -
Java 深入集合--HashMap
2013-08-18 21:48 2089一、HashMap介绍: 上面一篇介绍了ha ...
相关推荐
通过以上方面介绍那些常见、常用却少为人知的Java知识。虽然内容相对基本,但都不是容易解答的。目前更多的开发人员(不乏多年开发经验者),也仅仅停留在Java表面的层次,而本书,将更深入一层地去讨论Java的话题...
3.4.3 浮点类型 69 3.4.4 字符类型 69 3.4.5 布尔类型 71 3.5 数据类型转换 71 3.5.1 自动类型转换 71 3.5.2 强制类型转换 73 3.6 运算符 74 3.6.1 赋值运算符 74 3.6.2 算术运算符 75 3.6.3 自增和自减...
实例170 方法中抛出异常 218 实例171 方法上抛出异常 219 实例172 自定义异常类 220 实例173 捕获单个异常 221 实例174 捕获多个异常 222 第8章 枚举与泛型的应用 223 8.1 枚举使用的简介 224 实例175 查看枚举类型...
Xxx的含义与前一个方法中Xxx相同。 基本数据类型 •Java 的基本数据类型可以分为两大类: boolean 类型 和 数值类型. •而数值类型又可以分为整型和浮点型 –整型包括:byte short int long(广义的...
本书为中南大学精品教材立项项目,分为上下两篇共21章,涵盖了面向对象技术中Java开发环境配置、程序设计基础、面向对象原理以及UML的知识。本书使用的开发环境是JDK 1.6+Eclipse 3.3+Rational Rose 2003,逐步引领...
15.2.3 静态方法中的局部内部类 331 15.3 静态内部类 332 15.3.1 语法规则 332 15.3.2 创建静态内部类的对象 332 15.3.3 静态/非静态内部类的区别 333 15.4 匿名内部类 334 15.4.1 基于继承的匿名内部...
2 需求分析 2.1 设计背景 设计这个计算器主要是参考Windows操作系统中自带的计算器,由于编者水平和时间的限 制,不能将计算器设计到科学型及其他更复杂的类型,在设计过程中还参考了一些其他 的优秀设计。...
最常用的 3 个概念 sequence 序列,对应java 里的list 、数组等非键值对的集合 hash 键值对的集合 namespace 对一个ftl 文件的引用, 利用这个名字可以访问到该ftl 文件的资源 B 指令 if, else, elseif ...
6.1.9 常见属性和方法汇总 6.2 Math对象 6.2.1 基本数学运算 6.2.2 任意范围随机数发生器 6.2.3 访问其基本属性 6.2.4 使用with声明简化表达式 6.2.5 常见属性汇总 6.2.6 常见方法汇总 6.3 Array对象 6.3.1 创建数组...
6.5.4 常见属性和方法汇总 6.6 Boolean对象 6.6.1 创建Boolean对象的实例 6.6.2 将Boolean对象转化为字符串 6.6.3 常见属性和方法汇总 6.7 Function对象 6.7.1 两个概念:Function与function 6.7.2 使用Function...
JSP 表达式语言提供以下操作符,其中大部分是 Java 中常用的操作符: 术语 定义 算术型 +、-(二元)、*、/、div、%、mod、-(一元) 逻辑型 and、&&、or、||、!、not 关系型 ==、eq、!=、ne、、gt、、le、>...
MySql的用户管理是通过 User表来实现的,添加新用户常用的方法有两个,一是在User表插入相应的数据行,同时设置相应的权限;二是通过GRANT命令创建具有某种权限的用户。其中GRANT的常用用法如下: grant all on mydb...
2.3.5 浮点类型 48 2.3.6 ISO/ANSI C++中的基本类型 49 2.3.7 字面值 50 2.3.8 定义数据类型的同义词 50 2.3.9 具有特定值集的变量 51 2.3.10 指定枚举常量的类型 52 2.4 基本的输入/输出操作 53 ...
3.6. 常用查询的例子 3.6.1. 列的最大值 3.6.2. 拥有某个列的最大值的行 3.6.3. 列的最大值:按组 3.6.4. 拥有某个字段的组间最大值的行 3.6.5. 使用用户变量 3.6.6. 使用外键 3.6.7. 根据两个键搜索 3.6.8. 根据天...
3.6. 常用查询的例子 3.6.1. 列的最大值 3.6.2. 拥有某个列的最大值的行 3.6.3. 列的最大值:按组 3.6.4. 拥有某个字段的组间最大值的行 3.6.5. 使用用户变量 3.6.6. 使用外键 3.6.7. 根据两个键搜索 3.6.8....
2.3.5 浮点类型 46 2.3.6 字面值 47 2.3.7 定义数据类型的同义词 48 2.3.8 具有特定值集的变量 49 2.4 基本的输入/输出操作 50 2.4.1 从键盘输入 50 2.4.2 到命令行的输出 50 2.4.3 格式化输出 51 2.4.4 ...
6.17.2 元组类型操作符和内建函数.c内建方法 6.18 元组的特殊特性 6.18.1 不可变性给元组带来了什么影响 6.18.2 元组也不是那么“不可变” 6.18.3 默认集合类型 6.18.4 单元素元组 ...