BigDecimal,注解
BigDecimal
问题重现
今天在干活的途中,发现一个很坑爹的问题,让我来复现下问题:
- 从上游接口获得的余额,对于为0的,做了判断
BigDecimal a = new BigDecimal(acceptData);
if ( a == BigDecimal.ZERO) ...
- 然后发现线上有对比问题;
- 试验了下
BigDecimal a = BigDecimal.ZERO;
BigDecimal b = new BigDecimal("0.00");
Boolean c = a == b;
BigDecimal d = new BigDecimal(0.5);
BigDecimal e = new BigDecimal("0.5");
- 然后很神奇的发现,bigDecimal很不乖。。。
原因
BigDecimal最早出现也是因为计算精度的问题,用float或者double会造成精度丢失;
但是,用
BigDecimal d = new BigDecimal(0.5);
直接赋值,会发现,
d=0.512121315421654616544...
这样子很神奇的一串数字。
然后,还会发现,上面两个“零值”相比是不同的,这也是我代码出现问题的原因。
查东西,会发现,对于BigDecimal的赋值,一般推荐使用基于String的构造器;
否则,由于上面这种情况,依然会造成精度的丢失,还更加麻烦。
说到麻烦,若是涉及BigDecimal的计算,推荐单独写方法聚合在一起!!
因为,比如double,要先转成String,然后再构造BigDecimal对象,计算完再转成double
注解
Annotation,从写java以来就常用到,因为真tm好用,但,一直没搞懂,也没有自己定义过注解。
定义些
其实,首先要明白的就是,注解是Java中一种特殊的标记;
对于标记的代码,会做相应的处理,不管是传值也好,做操作也好,标记提示开发人员也好,本质上是个标记。
对于标记的操作,需要反射回来,做相应的处理的。
构成
记个公式吧:
注解 = 5个基本注解 + 6个元注解 + 自定义注解 + APT(Annotation Processing Tool)
其中的内容到处都查得到,自己查吧
实现
通过实现一个自定义注解来熟悉下
@Retention(RetentionPolicy.RUNTIME)
@Documented
public @interface Testable {
String name();
}
public class AnnotationTest {
@Testable(name = "shit")
public void test(){
Class<String> a = new Class<String>();
a.getAnnotations()
}
}
呃,代码没写完。。。
反正就是用反射,拿到参数值进行利用。
所以这里又有两个坑:反射以及泛型。
另外最后再记录下
- Retention:注解可以保留多长时间;CLASS 编译器将把注解记录在class文件中,jvm不可获取信息;RUNTIME 记录在class中,且jvm可以获取信息; SOURCE 只保留在源代码中;
- TARGET:修饰哪些程序单元,比如METHOD,TYPE等
BigDecimal,注解的更多相关文章
- Dagger2学习笔记
Dagger2是第一个使用生成代码的方式实现依赖注入的框架.作为Dagger的升级版本,自然有它的优势,优先注重的是执行效率.本文着重介绍Dagger2.官方据点传送门: https://google ...
- 【译】Spring 4 + Hibernate 4 + Mysql + Maven集成例子(注解 + XML)
前言 译文链接:http://websystique.com/spring/spring4-hibernate4-mysql-maven-integration-example-using-annot ...
- jdbctemplate中的批量更新使用,BigDecimal与造型的联系和区别
//jdbctemplate批量新增的使用MENU_ID_LIST是前端页面传递到后端控制层,再由控制层传到实现层的List //JdbcTemplate是spring jdbctemplate通过注 ...
- jackson注解使用心得
maven依赖: <dependency> <groupId>com.fasterxml.jackson.core</groupId> <artifactId ...
- 简单的JPA注解例子
package ssh.entity; import java.math.BigDecimal; import java.util.Date; import javax.persistence.*; ...
- morhia解决BigDecimal映射问题
错误信息:morphia No usable constructor for java.math.BigDecimal 解决办法:增加自定义类型转换器,代码如下 package cn.huilink. ...
- spring MVC注解深入研究
@Controller @Service @Controller和 @Component注册一个action 到spring 上下文中,bean 的ID 默认为类名称开头字母小写.@Reposito ...
- jackson annotations注解详解 (zhuan)
http://blog.csdn.net/sdyy321/article/details/40298081 ************************************** 官方WIKI: ...
- JPA的Column注解总结
就像@Table注解用来标识实体类与数据表的对应关系类似,@Column注解来标识实体类中属性与数据表中字段的对应关系. 该注解的定义如下: @Target({METHOD, FIELD}) @Ret ...
随机推荐
- [Usaco2004 Open]Cube Stacking 方块游戏
题面: 约翰和贝茜在玩一个方块游戏.编号为1到n的n(1≤n≤30000)个方块正放在地上.每个构成一个立方柱. 游戏开始后,约翰会给贝茜发出P(1≤P≤100000)个指令.指令有两种 ...
- ldap 禁止匿名登录(5)
[root@zabbix1 ~]# cat disable_anon.ldif dn: cn=config changetype: modify add: olcDisallows olcDisall ...
- Python之Django的Model2
一.创建数据库 创建数据库 进入数据库: mysql -uroot -p 创建数据库: CREATE DATABASE test1 CHARSET=utf8; 连接数据库 虚拟环境中安装数据库模块:p ...
- 读取com口接收byte数据的处理
procedure Tfrm_CheckCloth.cnrs232ReceiveData(Sender: TObject; Buffer: Pointer; BufferLength: Word); ...
- logstash-input-jdbc实现mysql 与elasticsearch实时同步(ES与关系型数据库同步)
引言: elasticsearch 的出现使得我们的存储.检索数据更快捷.方便.但很多情况下,我们的需求是:现在的数据存储在mysql.oracle等关系型传统数据库中,如何尽量不改变原有数据库表结构 ...
- Windows系统SNMP数据监测与OID
Windows系统SNMP数据监测与OID http://blog.csdn.net/liuhuango123/article/details/52253953
- [bzoj1090][SCOI2003]字符串折叠_区间dp
字符串折叠 bzoj-1090 SCOI-2003 题目大意:我说不明白...链接 注释:自己看 想法:动态规划 状态:dp[i][j]表示从第i个字符到第j个字符折叠后的最短长度. 转移:dp[l] ...
- Remote Desktop安卓软件实现手机远程控制电脑
这篇文章写的是利用Remote Desktop安卓软件实现手机远程控制电脑. 电脑上的操作: 鼠标右击计算机>属性>远程设置>计算机名 如下图:
- POJ 2373
原本一道挺简单的DP题,思路有了,运用单调队列,但在写单调队列时写挫了... 这道题只需要计算偶数位置的即可,这是显而易见的,我有注意过这情况,写的时候却没在意...--! 加入队列的元素应该当前no ...
- Tomcat启动时载入某个servlet
当我们做一个java项目时,有几个功能都须要载入servlet或者实现某个共同的方法,尽管我们一味地在每个功能中依次载入也不是不能够,可是当某个servlet 或者方法被频繁地载入和应用.我们将面向对 ...