浮点运算误差

上篇博客利用Hibernate搭建起一个简单的例子,把数据库的映射显示了出来在上一篇的博客基础上这篇博客讲述如何利用Hinbernate框架实现简单的数据库操作。

1、加入junit.jar

2、新建一个工具类HibernateUtils.Java把一些对session的公共操作封装起来

import org.hibernate.Session;
import org.hibernate.SessionFactory;
import org.hibernate.cfg.Configuration;

public class HibernateUtils {
/*
  *读取Hibernate.cfg.xml文件
*/
	private static SessionFactory factory;

	static {
		try {
			//读取hibernate.cfg.xml文件
			Configuration cfg = new Configuration().configure();

			//建立SessionFactory
			factory = cfg.buildSessionFactory();
		}catch(Exception e) {
			e.printStackTrace();
		}
	}
	/*
	  *打开Session
	*/

	public static Session getSession() {
		return factory.openSession();
	}
	/*
	  *关闭Session
	*/

	public static void closeSession(Session session) {
		if (session != null) {
			if (session.isOpen()) {
				session.close();
			}
		}
	}

	public static SessionFactory getSessionFactory() {
		return factory;
	}
}

3、新建一个test类继承TestCase(Junit包里面的)然后下面就利用test类对User对象的增、删、改、查。

import java.util.Date;

import org.hibernate.Session;

import com.bjpowernode.hibernate.HibernateUtils;

import com.bjpowernode.hibernate.User;

import junit.framework.TestCase;

public class test extends TestCase {
/*
 * 增加User
 */
	public void testSave() {

		Session session = null;
		try {
			session = HibernateUtils.getSession();
			session.beginTransaction();

			User user = new User();
			user.setName("李四");
			user.setPassword("123");
			user.setCreateTime(new Date());
			user.setExpireTime(new Date());
			session.save(user);
			session.getTransaction().commit();
		}catch(Exception e) {
			e.printStackTrace();
			session.getTransaction().rollback();
		}finally {
			HibernateUtils.closeSession(session);
		}
	}
	/**
	 * 删除
	 */
	public void testDel(){
		Session session = null;
		try {
			session = HibernateUtils.getSession();
			session.beginTransaction();

			User user=(User)session.load(User.class, "4028989545a244640145a24466300001");

			session.delete(user);
			session.getTransaction().commit();
		}catch(Exception e) {
			e.printStackTrace();
			session.getTransaction().rollback();
		}finally {
			HibernateUtils.closeSession(session);
		}
	}

	/**
	 * 修改
	 */
	public void testUpdate(){
		Session session = null;
		try {
			session = HibernateUtils.getSession();
			session.beginTransaction();

			User user=(User)session.load(User.class, "4028989545a243ca0145a243cbf80001");
			user.setName("王五");
			session.update(user);
			session.getTransaction().commit();
		}catch(Exception e) {
			e.printStackTrace();
			session.getTransaction().rollback();
		}finally {
			HibernateUtils.closeSession(session);
		}
	}

	/**
	 * 查询
	 */
	public void testLoad(){
		Session session = null;
		try {
			session = HibernateUtils.getSession();
			session.beginTransaction();

			User user=(User)session.load(User.class, "4028989545a243ca0145a243cbf80001");
			System.out.println(user.getName());
			System.out.println(user.getId());
			System.out.println(user.getPassword());
			System.out.println(user.getClass());
			System.out.println(user.getCreateTime());
			System.out.println(user.getExpireTime());
			session.getTransaction().commit();
		}catch(Exception e) {
			e.printStackTrace();
			session.getTransaction().rollback();
		}finally {
			HibernateUtils.closeSession(session);
		}
	}
}

4、效果图

总结:

利用Hibernate简单的增、删、改、查操作的应用是一个很基础的应用刚学Hibernate就应该先从简单的学起。

浮点运算误差,码迷,mamicode.com

时间: 2024-10-28 03:31:37

浮点运算误差的相关文章

常用的javascript小技巧

字符串转换为数值 常规方法: var var1 = parseInt("2"); var var2 = parseFloat("2"); var var3 = Number("2"); var var3 = new Number("2"); 简便方法: var var1 = +("2"); 将其他类型转换为boolean类型 在JavaScript中,所有值都能隐式的转化为Boolean类型: 数据类型 转

Babel(抽象语法树,又称AST)

文章:https://juejin.im/post/5a9315e46fb9a0633a711f25 https://github.com/jamiebuilds/babel-handbook/blob/master/translations/zh-Hans/plugin-handbook.md 你了解过Babel吗? 了解过抽象语法树,又称AST,有学习过,也写过一个基于AST的乞丐版模板引擎,先是词法解析token,然后生产抽象语法树,然后更改抽象语法树,当然这是插件做的事情,最后根据新的A

JavaScript中Number数字数值浮点运算有误差

JavaScript浮点运算的一个bug. 比如:7*0.8 JavaScript算出来就是:5.6000000000000005 //调用:numberExcept(arg1,arg2) //返回值:arg1除以arg2的精确结果function   numberExcept(arg1,arg2){ var t1=0,t2=0,r1,r2;  try{t1=arg1.toString().split(".")[1].length}catch(e){}  try{t2=arg2.toS

js数值计算的处理,防止精度误差

(解决方法一:重写浮点运算的函数) //除法函数,用来得到精确的除法结果 //说明:javascript的除法结果会有误差,在两个浮点数相除的时候会比较明显.这个函数返回较为精确的除法结果. //调用:accDiv(arg1,arg2) //返回值:arg1除以arg2的精确结果 function accDiv(arg1,arg2){ var t1=0,t2=0,r1,r2; try{t1=arg1.toString().split(".")[1].length}catch(e){}

浮点运算潜在的结果不一致问题

昨天阿楠发现了项目中的一个 bug ,是因为浮点运算的前后不一致导致的.明明是完全相同的 C 代码,参数也严格一致,但是计算出了不相同的结果.我对这个现象非常感兴趣,仔细研究了一下成因. 原始代码比较繁杂.在弄清楚原理后,我简化了出问题的代码,重现了这个问题: static void foo(float x) { float xx = x * 0.01f; printf("%d\n", (int)(x * 0.01f)); printf("%d\n", (int)x

【数值分析】误差的分析与减少及Matlab解线性方程的四种方法

1.误差的来源 模型误差:数学模型与实际问题之间的误差 观测误差:测量数据与实际数据的误差 方法误差:数学模型的精确解与数值方法得到的数值解之间的误差:例如 舍入误差:对数据进行四舍五入后产生的误差 2.减少误差的几种方法 现在,我们一般用计算机解决计算问题,使用最多的是Matlab软件.对实际问题进行数学建模时,可能存在模型误差,对数学模型进行数值求解时,我们使用的方法可能产生方法误差,我们输入计算机的数据一般是有测量误差的,计算机在运算过程的每一步又会产生舍入误差(十进制转化为二进制时可能产

js 浮点运算bug

js几个浮点运算的bug,比如6.9-1.1,7*0.8,2.1/0.3,2.2+2.1 实现思路 通过将浮点数放大倍数到整型(最后再除以相应倍数),再进行运算操作,这样就能得到正确的结果了 比如:11*(22.9*10)/10 1 <script> 2 //除法函数,用来得到精确的除法结果 3 //说明:javascript的除法结果会有误差,在两个浮点数相除的时候会比较明显.这个函数返回较为精确的除法结果. 4 //调用:2.1.div(0.3) 等于2.1 / 0.3 5 //返回值:t

iOS: 零误差或极小误差的定时执行或延迟执行?

问题如下: 节奏类游戏需要执行很多的跟音乐节拍相关的操作,并且为了保证节奏感,需要让操作跟节拍的关系十分紧密.对两者间隔要求不能超过0.02秒或更低. 目前使用了 GCD 中的 asyncAfter(deadline:)方法,不过误差总是要大于0.05秒,并且还无法保证误差会不会传递下去.请问有更好的方式来解决误差吗? var time = Date().timeIntervalSince1970 let dq = DispatchQueue(label: "queue", qos:

SICP 习题 (2.15)解题总结:区间误差的深入思考

SICP 习题 2.15 是接着 题目 2.14 的, 题目 2.14中提到了Alyssa设计的区间计算模块在并联电阻计算时会出现问题,这个问题是Lem发现的.接着,一个叫Eva的人也发现了这个问题,同时她还有更深入的思考. Eva觉得,如果一个公式可以写成一种形式,其中具有非准确性的变量不重复出现,那么Alyssa的系统产生的区间的限界会更紧一些. 因此,她觉得在计算并联电阻时,公式"1/(1/R1 + 1/R2)"比公式"(R1*R2)/ (R1 + R2)"要