java开发中,一般涉及到金钱计算的时候用啥数据类型

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了java开发中,一般涉及到金钱计算的时候用啥数据类型相关的知识,希望对你有一定的参考价值。

    回答: 一般使用 java.math.BigDecimal  类来处理需要高精度的计算

    原因: 1.浮点数(double,flot)因为精度问题, 容易出现不精确的计算结果

    2.浮点数范围比较小

    BigDecimal  范围大, 并且比他们精确

    参考代码

import java.math.BigDecimal;

public class Demo 
public static void main(String[] args) 
//浮点数,存在精度问题
double d1 = 0.19*6;
System.out.println(d1);//1.1400000000000001
//采用BigDecimal 来解决精度问题
BigDecimal bd1 = new BigDecimal("0.19");
BigDecimal bd2 = new BigDecimal("6");
BigDecimal bd3 = bd1.multiply(bd2);
System.out.println(bd3);//1.14

输出

1.1400000000000001
1.14

参考技术A 建议使用java.math.BigDecimal 参考技术B Java开发中,一般涉及到金钱计算的时候用Java.math.BigDecima类型。学java开发推荐千锋教育。千锋教育“把握教育质量生命线”是千锋服务学员、服务高校、服务企业的核心点,千锋历来重视教研教学,自创立伊始便成立了职业教育科学研究机构——千锋教研院,并且每年千万投入用于教研。

浮点型常量 Java的实常数有两种表示形式:十进制数形式,由数字和小数点组成,且必须有小数点,如0.123, .123, 123. ,123.0 。 科学计数法形式。如:123e3或123E3,其中e或E之前必须有数字,且e或E后面的指数必须为整数。实常数在机器中占64位,具有double型的值。对于float型的值,则要在数字后加f或F,如12.3F,它在机器中占32位,且表示精度较低。浮点型变量 浮点型变量的类型有float和double两种。 数据类型所占位数的范围: float 32位 3.4e-038~3.4e+038 ; double 64位 1.7e-308~1.7e+308 ; 双精度类型double比单精度类型float具有更高的精度,和更大的表示范围。

想要了解更多关于java开发的相关信息,推荐咨询千锋教育。千锋教育成立教研学科中心,推出贴近企业需求的线下技能培训课程。课程包含html5大前端培训、JavaEE+分布式开发培训、Python人工智能+数据分析培训、全链路UI/UE设计培训、云计算培训、全栈软件测试培训、大数据+人工智能培训、智能物联网+嵌入式培训、Unity游戏开发培训、网络安全培训、区块链培训、影视剪辑包装培训、游戏原画培训、全媒体运营培训。

QT数据库访问技术简介

背景介绍

本人使用过PHP/C#/VB/VB.NET/JAVA等编程语言开发过基于数据库方面的应用,相对于其它编程语言来说,个人感觉QT的数据库访问框架在设计时有些混乱,所以在最开始使用的时候一度有些困惑。在后来多次使用QT开发应用的过程中,才慢慢使用了QT的数据库访问框架。

功能对比

一般来说,涉及到数据库访问的框架会有如下功能的类:数据库驱动管理类、数据库连接类、执行增删改查的数据库操作类、用于接收执行查询操作返回的结果集的类、数据库事务管理类以及数据库异常方面的类。

例如在Java和C#中大概的对应关系如下:


 



Java


C#



数据库驱动层



java.sql.Driver



System.Data.Common.DbProviderFactory



数据库连接层



java.sql.Connection



System.Data.Common.DbConnection



数据库执行层



java.sql.Statement

java.sql.PreparedStatement



System.Data.Common.DbCommand

System.Data.Common.DbDataAdapter



结果集表示层



java.sql.ResultSet



System.Data.Common.DataReader

System.Data.Common.DataTable

System.Data.DataRow

System.Data.DataColumn



数据库事务层



java.sql.Connection.commit();

java.sql.Connection.rollback();



System.Data.Common.DbTransaction.commit()

System.Data.Common.DbTransaction.rollback()



数据库异常



java.sql.SQLException



System.Data.Common.DbException




说明:在Java SE中定义的以接口居多,需要具体的数据库实现。在C#中微软分别提供了接口(位于System.Data命名空间下)、抽象类(位于System.Data.Common命名空间下)和针对一些具体数据库的实现类。在上表中C#部分主要是抽象类。另外,由于语言的不同,很难将相关的类或接口完全严格地填入上面的表中,只能是近似。

在QT的数据库编程访问体系中,主要提供了QSqlDatabase、QSqlDriver、QSqlError、QSqlField、QSqlIndex、QSqlQuery、QSqlQueryModel、QSqlRecord、QSqlResult、QSqlTableModel类,除了上述类之外还有QSqlDriverCreator、QSqlDriverCreatorBase、QSqlRelationalTableModel类。如果按照上述的功能划分,那么表格基本可以理解:


 



QT



说明



数据库驱动层



QSqlDriver



 



数据库连接层



QSqlDatabase



QSqlDatabase.exec(const QString &query = QString())可以直接执行SQL语句



数据库执行层



QSqlQuery



 



结果集表示层



QSqlRecord

QSqlField

QSqlIndex

QSqlResult

QSqlQueryModel

QSqlTableModel



 



数据库事务层



QSqlDatabase.commit();

QSqlDatabase.rollback();



 



数据库异常



QSqlError



 




QT中数据库操作常用类介绍

在QT的帮助文档里,QT将上述的数据库相关的类分为三个层级,最底层的一个层级为驱动层,在这个层级的类有:QSqlDriver、QSqlDriverCreator、QSqlDriverCreatorBase等,在驱动层之上是SQL接口层,在这个层级的类有QSqlDatabase、QSqlQuery、QSqlField、QSqlRecord、QSqlIndex、QSqlError等,在SQL接口层之上是用户接口层,用户接口层的类有QSqlQueryModel、QSqlTableModel及QSqlRelationalTableModel等。

对于上面的类的作用介绍如下:


序号





说明



1



QSqlDriver



这个类一般不会直接使用,除非想开发自己的数据库驱动。它是用于访问特定数据库的抽象类。



2



QSqlDatabase



用于连接数据库的类,提供了数据库连接、访问和事务控制等功能,并且还支持获取当前支持的驱动(QSqlDatabase::drivers())、直接支持SQL语句(QSqlDatabase.exec(const QString &query = QString()))、获取指定表的主键(QSqlDatabase::primaryIndex(const QString &tablename))、获取指定表的字段信息(QSqlDatabase::record(const QString &tablename))等操作。



3



QSqlQuery



用于执行SQL语句的类,支持通过QSqlQuery::boundValue()的重载形式来执行参数化SQL语句。通过QSqlQuery::record()方法返回结果集中的一行记录,通过QSqlResult *QSqlQuery::result()返回结果集,通过QSqlQuery::value()重载形式返回指定字段的值。



4



QSqlRecord



用于封装数据库记录的类,QSqlRecord封装了数据库表或视图中的一行记录,一个QSqlRecord可能包含0到多个QSqlField,可以用QSqlRecord::field()的重载形式获取QSqlRecord中包含的QSqlField,也可以用QSqlRecord::value()的重载形式获取QSqlRecord各字段的值(返回值为QVariant,需要根据实际字段类型进行转换)



5



QSqlField



用于封装数据库表或视图中的字段,通过QSqlField类可以获取字段的名称、所属表名、是否允许为空、默认值、字段长度、是否为空、字段类型、字段值等信息。



6



QSqlIndex



用于封装数据库索引的类,通过QSqlIndex类可以获取索引的名称、索引是降序或升序等信息。



7



QSqlResult



用于封装数据库特定的数据而抽象的类,通常情况应尽量使用QSqlQuery而不是QSqlResultQSqlQueryQSqlResult的基础上提供了一层封装。如果需要实现自己的数据库驱动,那么就需要实现自己的QSqlResult类,一般情况下尽量使用QSqlQuery吧。



8



QSqlError



用于封装数据库错误信息的类,可以通过QSqlError::isValid()来判断是否发生了数据库错误,在发生错误的情况下可以通过QSqlError::databaseText()获取数据库报告的错误,通过QSqlError::driverText()获取驱动程序报告的错误,还可以通过QSqlError::nativeErrorCode()获取数据库层面的本地错误代码,QSqlError::nativeErrorCode()现在软件开发、一般都用啥语言啊!

java 金融数字用啥类型

手机游戏是用啥开发的?

app开发用啥语言?

做java开发的公司一般用啥开发软件

现在软件开发,一般都用啥语言啊?

(c)2006-2024 SYSTEM All Rights Reserved IT常识