这时他已经不是那个只会做100以内加法的那个“小明”了,现在他甚至会任意长度的正小数的加法。 现在,给你两个正的小数A和B,你的任务是代表大明计算出A+B的值。...每一组测试数据在一行里面包含两个长度不大于400的正小数A和B。 Output 请在一行里面输出输出A+B的值,请输出最简形式。详细要求请见Sample Output。...a = sc.nextBigDecimal(); BigDecimal b = sc.nextBigDecimal(); a = a.add(b);...a = a.stripTrailingZeros(); //返回数值上等于此小数,但从该表示形式移除所有尾部零的 BigDecimal。...System.out.println(a.toPlainString()); //a.toPlainString()返回不带指数字段的此 BigDecimal 的字符串表示形式。
在使用时候,用户通过指定已经定义的存储过程名字并给出相应的存储过程参数来调用并执行它,从而完成一个或一系列的数据库操作。 区别:是否可以通过return返回函数值。...存储函数可以通过return返回函数值;而存储过程不可以。 注意点:由于通过out参数,存储过程也可以返回函数值,所以存储过程和存储函数已经没有太大的区别了。...参数可以带也可以不带。 as相当于PLSQL语句中的declare,用来声明变量、游标等,但是不可以省略。 2....存储函数 1. 存储函数 函数(Function)为一命名的存储程序,可带参数,并返回一计算值. 函数和过程的结构类似,但必须有一个return子句,用于返回函数值. 2....创建存储函数的语法 create [or replace] function 函数名(参数列表) return 函数值类型 as PLSQL子程序体; 注意事项: (1) 与存储过程注意事项类似,不同的是
scaled_float 是 Elasticsearch提供的一种特殊的数字数据类型,用于存储带小数的数字。...在许多应用场景中,我们需要存储具有小数的数字,例如价格、评分等。...例如,如果 scaling factor 是100,那么数字12.34将会被存储为1234。在查询和返回结果时,Elasticsearch将会除以 scaling factor ,返回原始的浮点数。...所以实际存储的值是123456和789012。 查询时,Elasticsearch会自动将价格除以scaling_factor,返回原始的浮点数。...这样,可以在保持较高精度的同时,使用更少的存储空间和更好的性能来存储和查询价格了。
1-1存储过程和存储函数 ---- 存储在数据库中供所有用户程序调用的子程序叫做存储过程,存储函数。 区别:是否可以通过return返回函数值。...存储函数可以通过return返回函数值,而存储过程不可以。 相同点:完成特定功能的程序。 由于通过out参数,存储过程也可以返回函数值,所以存储过程和存储函数已经没有太大的区别了。...语法: create [or replace] procedure 过程名(参数列表) as PLSQL子程序体; 注意事项: 存储过程或者存储函数,只能创建或者替换; 参数可以带也可以不带; as相当于...2-2不带参数的存储过程:不用带括号 程序窗口中执行: --第一个存储过程:打印HelloWorld /* 调用存储过程的两种方式: 1、exec sayHelloWorld(); 2、begin...创建存储函数的语法 create [or replace] function 函数名(参数列表) return 函数值类型 as PLSQL子程序体; 注意事项: 与存储过程注意事项类似,不同的是,必须有个返回值
这里写图片描述 存储过程和函数的语法 过程的语法: create [or replace] procedure 过程名[(参数列表)] as PLSQL程序体;【begin…end;...END; 调用过程的三种方式: exec过程名【SQLPLUS中使用】 PLSQL程序调用 Java调用 PLSQL调用 BEGIN hello(); END; 创建有参存储过程raiseSalary...findEmpNameAndSalAndJob(编号),查询7788号员工的的姓名,职位,月薪,返回多个值,演示out的用法 创建过程:在过程中的参数,默认值是IN,如果是输出的话,那么我们要指定为OUT...(pempno IN NUMBER, pjob OUT VARCHAR2, income OUT NUMBER) --这里指定的是返回值类型 RETURN VARCHAR AS /*查询出来的字段与列名相同...不难发现的是,函数是必定要有一个返回值的,当我们在调用的时候,接受返回值就直接获取就行了。 也就是说 当返回值只有一个参数的时候,那么就使用存储函数!
引言 在互联网应用中,处理货币是一项常见的任务。为了确保准确性和精度,我们需要选择适当的字段类型来存储货币数据。本文将讨论在MySQL和Java中记录货币时应选择的字段类型,并提供相应的代码示例。...MySQL中的货币字段类型 在MySQL中,我们可以使用DECIMAL数据类型来存储货币数据。DECIMAL提供了固定精度和小数位数的数字存储,非常适合处理货币金额。...Java中的货币字段类型 在Java中,我们可以使用java.math.BigDecimal类来表示和处理货币数据。BigDecimal提供了高精度的十进制计算,适合处理货币金额。...然后,我们可以执行查询操作来获取该记录。 结论 在MySQL和Java中记录货币时,我们需要选择适当的字段类型来确保准确性和精度。在MySQL中,使用DECIMAL类型存储货币金额是一种常见的做法。...而在Java中,使用BigDecimal类来表示和处理货币数据是推荐的方式。本文详细介绍了在MySQL和Java中记录货币时的字段类型选择,并提供了相应的代码示例
double为什么不精确 首先,计算机是只认识二进制的,即0和1,这个大家一定都知道。 那么,所有数字,包括整数和小数,想要在计算机中存储和展示,都需要转成二进制。...如果大家看过BigDecimal的源码,其实可以发现,实际上一个BigDecimal是通过一个"无标度值"和一个"标度"来表示一个数的。 在BigDecimal中,标度是通过scale字段来表示的。...当unscaled value超过阈值(默认为Long.MAX_VALUE)时采用intVal字段存储unscaled value,intCompact字段存储Long.MIN_VALUE,否则对unscaled...value进行压缩存储到long型的intCompact字段用于后续计算,intVal为空。...除了scale这个字段,在BigDecimal中还提供了scale()方法,用来返回这个BigDecimal的标度。
的小数部分 如果生成的 "BigInteger" 太大 仅返回 64 位低位字节 此转换会丢失关于此 BigDecimal 值的总大小和精度的信息 floatValue...的小数部分此转换会丢失关于 BigDecimal 值的精度信息 XXXValueExact byte byteValueExact()转换为 byte如果此 BigDecimal 具有非零小数部分,...,需要指数时,则使用工程计数法 toPlainString() 返回不带指数字段的此 BigDecimal 的字符串表示形式 toString的三个方法根本逻辑是一样的,都是转换为字符串只不过具体的形式不同...移动小数点 movePointLeft该值的小数点向左移动 n 位如果 n 为负数,则该调用等效于 movePointRight(-n)如果 n 为非负数,则调用仅将 n 添加到该标度返回的值和标度分别为...: movePointRight小数点向右移动 n 位如果 n 为负,则该调用等效于 movePointLeft(-n)如果 n 为非负数,则该调用仅从该标度减去 n返回的值和标度分别为: BigDecimal
14.要合理设置字段类型和长度我们在设计表的时候,要给相关字段设置合理的字段类型和长度。如果字段类型和长度不够,有些数据可能会保存失败。如果字段类型和长度太大了,又会浪费存储空间。...以下原则可以参考一下:尽可能选择占用存储空间小的字段类型,在满足正常业务需求的情况下,从小到大,往上选。如果字符串长度固定,或者差别不大,可以选择char类型。...如果是调用第三方的接口批量查询接口,尽量分批调用,不要一次性根据id集合查询所有数据。如果调用第三方批量查询接口,对性能有一定的要求,我们可以分批之后,用多线程调用接口,最后汇总返回数据。...Double类型的两个参数相减会转换成二进制,因为Double有效位数为16位这就会出现存储小数位数不够的情况,这种情况下就会出现误差。...因此,在做小数运算时,更推荐大家使用BigDecimal,避免精度的丢失。但如果在使用BigDecimal时,使用不当,也会丢失精度。
,浮点类型在进行运算时可能会产生精度丢失的问题尤其是当它们表示非常大或非常小的数,或者需要进行高精度的金融计算时为了解决这个问题,Java 提供了 BigDecimal 类BigDecimal 使用各种字段来满足高精度计算...,为了后续的描述,这里只需要记住两个字段precision字段:存储数据十进制的位数,包括小数部分scale字段:存储小数的位数BigDecimal的使用方式再后续踩坑中进行描述,最终总结出BigDecimal...// 0 System.out.println(d1.compareTo(d2));}在BigDecimal的equals方法中能看到,小数位数scale不相等则返回falsepublic boolean...) return true; //小数精度不相等 返回 false if (scale !...1.00(2位小数位数)和5.555(3位小数位数)相加/减时,结果的小数位数变成3位private static void calc() { BigDecimal d1 = BigDecimal.valueOf
今天快下班时,兄弟团队过来问了个问题,一张表中的DATE类型字段在PLSQL-Developer中检索的时候,出现这种现象,如下所示,有记录存储的是"2019-01-01",即不带时间,有记录存储的是"...2019-01-01 23:59:59",即带了时间,如果想找出所有这种不带时间的记录,并对其进行更新,应该如何操作?...当指定存储“年月日”的日期时,他存储的是“年月日0点0分0秒”,在PLSQL Developer中,展示格式是"yyyy-mm-dd"(当然具体格式和Perferences的设置相关),即未带时间的。...当指定存储“年月日时分秒”的日期时,他存储的是“年月日时分秒”,在PLSQL Developer中,展示格式是"yyyy-mm-dd hh24:mi:ss"(当然具体格式和Perferences的设置相关...下个问题,就是如何找到,这些所谓不带时间的记录,一开始是想通过extract函数,提取出“时分秒”,让其分别等于0,作为条件检索, ?
,就和 Java 中的 BigDecimal 一样,p 代表数值位数(长度),取值范围 [1, 38];s 代表小数点后的位数(精度),取值范围 [0, p]。...以 Java 举例,class 参数代表具体对应的 Java 类型,snapshot 代表类型在发生网络传输时的序列化器 ⭐ 日期、时间类型: ⭐ DATE:由 年-月-日 组成的 不带时区含义 的日期类型...,取值范围 [0000-01-01, 9999-12-31] ⭐ TIME、TIME(p):由 小时:分钟:秒[.小数秒] 组成的 不带时区含义 的的时间的数据类型,精度高达纳秒,取值范围 [00:00...] 组成的 不带时区含义 的时间类型,取值范围 [0000-01-01 00:00:00.000000000, 9999-12-31 23:59:59.999999999]。...复杂类型,用户可以通过 @DataTypeHint("DECIMAL(10, 2)") 注解标注此字段的数据类型 public @DataTypeHint("DECIMAL(10, 2)") BigDecimal
首先我们要明白一点:BigDecimal本质上并不是设计专门用来存储货币字段的工具类。 BigDecimal是为了精确存储浮点数的,它是一个用来解决浮点误差的类。...而只不过在价格字段中,我们对浮点误差比较敏感。所以才会大规模的使用BigDecimal来存储金融字段。...2025-01-12 简单来讲,BigDecimal在存储小数的时候,会把小数扩大N倍使其成为一个整数,并且保留相对应的精度信息。...可以看到他其实和BigDecimal的思想是一样的,都是变成大数之后进行存储。 但是相比较于BigDecimal,Money字段因为有了币种的概念,使得其操作更加自由。...避免了BigDecimal在四则运算过程中大量产生垃圾对象的问题。 而且相比较于BigDecimal来讲,Money类也有更多关于金融类的个性化方法。例如它提供了金额的分配方法。
// 如果值在-16-16之间,那么返回的BigInteger是同一个对象。...public static BigInteger valueOf(long val) // 原因,以下代码在静态代码块中,返回时就是返回这两个数组对应位置的对象 for (int i = 1; i <...// 待完善 private final BigInteger intVal; // 表示小数位数 private final int scale; // 小数的位数,如果小数位数未知则为0,如果非...,则该值可以紧凑地存储在此字段中并用于计算。...scale和precision的区别,按照这个输出结果,scale输出的是小数位数,precision输出到底是什么,还有点蒙圈。
如:BigDecimal g = new BigDecimal(0.1f); 实际的存储值为:0.10000000149 正例:优先推荐入参为 String 的构造方法,或使用 BigDecimal...2) 数据库的查询结果可能为 null。 3) 集合里的元素即使 isNotEmpty,取出的数据元素也可能为 null。 4) 远程调用返回对象时,一律要求进行空指针判断,防止 NPE。...【强制】小数类型为 decimal,禁止使用 float 和 double。 说明:在存储的时候,float 和 double 都存在精度损失的问题,很可能在比较值的时候,得到不正确的 结果。...如果存储的数据范围超过 decimal 的范围,建议将数据拆成整数和小数并分开存储。 22.【推荐】防止因字段类型不同造成的隐式转换,导致索引失效。 23....25【强制】在表查询中,一律不要使用 * 作为查询的字段列表,需要哪些字段必须明确写明。 说明:1)增加查询分析器解析成本。 2)增减字段容易与 resultMap 配置不一致。
使用BigDecimal就不丢失精度? 通常我们会把一些小数类型的字段(比如:金额),定义成BigDecimal,而不是Double,避免丢失精度问题。...Double类型的两个参数相减会转换成二进制,因为Double有效位数为16位这就会出现存储小数位数不够的情况,这种情况下就会出现误差。 常识告诉我们使用BigDecimal能避免丢失精度。..." "空字符串的情况,isNotEmpty返回false,而isBlank返回true。...6. mapper查询结果要判空?...答案是否定的。 为什么呢? jdk官方说了不存在的情况会返回-1 ? indexOf方法返回的是指定元素在字符串中的位置,从0开始。
查看当前使用的数据库 在操作过程中,经常需要确认当前正在操作的数据库,可通过以下命令实现: SELECT DATABASE(); 这是MySQL提供的内置函数,若未选择任何数据库,会返回NULL。...NUMERIC(M,D) M+2 与DECIMAL完全等价 BigDecimal 同DECIMAL 关键特性: M表示总位数(不包含小数点和符号),D表示小数位数 若省略D,默认D=0;若省略M,默认...,然后用int类型去表示金额 decimal == numeric,两者都等于Java中的BigDecimal M中不计算小数点和负数的,如果D为0,则具体的值不保存小数点和小数部分(也就是说保存的是一个整数...) 使用建议: 避免使用TEXT存储频繁查询的短文本(影响性能) 数据库中不建议存储大文件(如图片、视频),应将文件存储在磁盘,表中仅保存文件路径 BLOB适用于存储小型二进制数据(如验证码图片),其中存放的是...,在查询文件的时候,先从数据库中找到文件路径,再去根据文件路径在磁盘上加载或是返回具体的真实文件 2.3 日期与时间类型 日期时间类型用于存储时间相关数据,MySQL提供了多种精度的类型: 数据类型 占用字节
在这些细节层面,DBCS还有很多地方需要向PLSQL学习。 优势1:Oracle存储过程调试 PLSQL的存储过程调试功能非常的稳定,对于Oracle的理解极为深入。...DBCS并不是不支持存储过程调试,而是目前远远没有PLSQL稳定,对于调试界面的交互也没有PLSQL理解的深入。...优势2:查询结果集的字段和注解信息 对于PLSQL来说,可以从结果集合中,通过点击列表头,看到这个列的字段和注解信息。尽管这是一个非常小的细节,但是的确能够极大提升用户体验。...优势3:查询器关键字和数据库对象的快速关联 PLSQL在查询面板内,按住ctrl,并且用鼠标移动到关键字的位置上,就能通过点击关键字定位到具体的对象。...经过实际发现,命令行窗口具备最好的交互性,对于整个SQL运行过程的留痕取证最为方便,特别是和图形界面集成之后,比原生的还好用。
,来回转换的过程称为”装箱“与”拆箱“:装箱:从基本类型转换为对应的包装类对象。...,存储频繁改变的字符串。...int get(int field) 返回给定日历字段的值。...z:表示时区BigDeicmal基本用法很多实际应用中需要精确计算,而double是近似值存储,不再符合要求,需要借助BigDecimal。为什么使用BigDecimal?...参数scale :指定精确到小数点后几位。参数mode :指定小数部分的取舍模式,通常采用四舍五入的模式。取值为BigDecimal.ROUND_HALF_UP。
有时候我们需要对数据库中的数据进行一些稍微复杂的操作,而且这些操作都是一次性的,用完之后就不再用了。 用存储过程的话就太麻烦,而且浪费,用完了还要去删除。而单个SQL无法满足需求。...这时候用一下SQL的语句块就可以了。 如果你用的是Oracle数据库,那么你就可以用PL/SQL(Procedure Language/SQL),即过程化查询语言。这是第三代语言。...但如果是在MYSQL/SQLSERVER数据库中,那PL/SQL就无法使用(PL/SQL是属于Oracle的过程查询语言)。...如果你要在MYSQL/SQLSERVER实现复杂的逻辑查询,那你只能通过编写存储过程实现。 下面对PL/SQL常用的一些基础知识进行讲解。...一般情况下,我们可以在存储过程的异常处理模块中将出错的信息保存到特定的系统表中,这样我们就可以根据日志记录得知执行的错误。