bigdecimal

了解Spring中常见的设计模式-------------------委派模式,策略模式

痴心易碎 提交于 2020-01-29 02:54:52
委派模式(Delegate Pattern) 基本作用 :负责任务的调度和分配任务,跟代理模式很像,可以看作是一种特殊情况下的静态代理的全权代理,但是代理模式更加注重过程,而委派模式更加注重结果 不属于GOF 23中设计模式之一 属于行为行模型 简单示例:(注册模式+工厂模式+委派模式) public interface Coder { public void coding(); } public class JavaCoder implements Coder { @Override public void coding() { System.out.println("use Java"); } } public class PythonCoder implements Coder { @Override public void coding() { System.out.println("use python"); } } public class Leader { private Map<String, Coder> job = new HashMap<>(); public Leader() { job.put("JAVA", new JavaCoder()); job.put("PYTHON", new PythonCoder()); } public void

解决浮点运算精度不准确,BigDecimal 加减乘除

半腔热情 提交于 2020-01-28 21:42:19
package com.kflh.boxApi.utils.util; import java.math.BigDecimal; /** * @program: BoxApi * @description: 计算浮点数 * @author: eterntiyz * @create: 2019-01-17 11:10 */ public class DoubleCalendar { /** * @Description: 浮点加法 * @Param: [] * @return: java.lang.Double * @Author: tonyzhang * @Date: 2019-01-17 11:27 */ public static Double add(String str1,String str2) { BigDecimal bignum1 = new BigDecimal(str1); BigDecimal bignum2 = new BigDecimal(str2); BigDecimal bignum3 = bignum1.add(bignum2); return bignum3.doubleValue(); } /** * @Description: 浮点减法 * @Param: [] * @return: java.lang.Double * @Author:

Java中的Double类型计算

戏子无情 提交于 2020-01-26 12:57:37
一、 问题的提出: 如果我们编译运行下面这个程序会看到什么? public class Test{ public static void main(String args[]){ System.out.println(0.05+0.01); System.out.println(1.0-0.42); System.out.println(4.015*100); System.out.println(123.3/100); } }; 你没有看错!结果确实是 0.060000000000000005 0.5800000000000001 401.49999999999994 1.2329999999999999 Java中的简单浮点数类型float和double不能够进行运算。不光是Java,在其它很多编程语言中也有这样的问题。在大多数情况下,计算的结果是准确的,但是多试几次(可以做一个循环)就可以试出类似上面的错误。现在终于理解为什么要有BCD码了。 这个问题相当严重,如果你有9.999999999999元,你的计算机是不会认为你可以购买10元的商品的。 在有的编程语言中提供了专门的货币类型来处理这种情况,但是Java没有。现在让我们看看如何解决这个问题。 四舍五入 我们的第一个反应是做四舍五入。Math类中的round方法不能设置保留几位小数,我们只能象这样(保留两位):

Java 浮点数相加

自闭症网瘾萝莉.ら 提交于 2020-01-25 21:03:17
  刚刚遇到个需求,需要对金额求和,上线的时候才知道这时个,这个字段是个小数。   随手就改了个Double ,然后,跑下,没啥问题,直接上线了   然后,就fuck 了   加出一大堆的小数,大概是这样的 package com.venn.demo; public class DoublePlus { public static void main(String[] args) { double d1 = 0.01; double d2 = 0.01; for (int i=0; i< 10; i++){ d2 += d1; System.out.println(d2); } } } 我以为的输出是这样的: 0.02 0.03 0.04 0.05 0.06 0.07 0.08 0.09 0.10 0.11 实际是这样的: 0.02 0.03 0.04 0.05 0.060000000000000005 0.07 0.08 0.09 0.09999999999999999 0.10999999999999999 一脸懵逼的看完一篇博客,似懂非懂的: 程序员必知之浮点数运算原理详解 结论就是:    很多十进制小数在转换成二进制时,并不能精确表示,只能是近似值。 解决办法就是使用BIgDecimal public static void bigDecimalDemo(){

Java精确计算

浪子不回头ぞ 提交于 2020-01-25 16:14:57
简介 JAVA的double型数据以及float类型的数据均不能进行精确计算,许多编程语言也是一样,这与计算机的底层原理有关。 因此计算得出的结果往往超出预期。 尤其是在金融行业,计算价格或者银行业务的钱的计算。精确计算变得尤为重要。 虽然我们可以通过四舍五入的方式来处理结果,但是这样做就意味着存在着误差。 场景分析 比如说下面这些计算,我知道结果应该是精确的数字,计算机并没有计算出我们想要的结果。 /** * @author wzm * @version 1.0.0 * @date 2020/1/25 14:24 **/ public class MathTest { public static void main(String[] args) { System.out.println(0.05 + 0.01); System.out.println(1.0 - 0.43); System.out.println(2.03 * 10); System.out.println(3.3 / 10); } } 计算结果: 0.060000000000000005 0.5700000000000001 20.299999999999997 0.32999999999999996 BigDecimal Java中提供精确计算的类。 java.math.BigDecimal 四则运算

BigDecimal can't be coerced into BigDecimal

こ雲淡風輕ζ 提交于 2020-01-24 03:32:27
问题 This should be pretty simple, yet it's blowing up. Any ideas? d = BigDecimal.new("2.0") YAML::load({:a => d}.to_yaml) TypeError: BigDecimal can't be coerced into BigDecimal from /Users/benjohnson/.rvm/rubies/ruby-1.9.3-p125/lib/ruby/1.9.1/irb/inspector.rb:86:in `inspect' from /Users/benjohnson/.rvm/rubies/ruby-1.9.3-p125/lib/ruby/1.9.1/irb/inspector.rb:86:in `inspect' from /Users/benjohnson/.rvm/rubies/ruby-1.9.3-p125/lib/ruby/1.9.1/irb/inspector.rb:86:in `block in <module:IRB>' from /Users

Performace of BigDecimal vs. BigInteger and BigDecimal

試著忘記壹切 提交于 2020-01-22 14:51:47
问题 I was debating whether to use BigDecimal and BigInteger or only BigDecimal to make my life easier and less converting back and forth. Is there a downside to only using BigDecimal in regards to resources? How about using only primitive data types and BigInteger or only BigInteger to make my life easier and less converting back and forth? 回答1: From: http://www.javamex.com/tutorials/math/BigDecimal_BigInteger_performance.shtml Note that a BigDecimal is essentially a wrapper around a BigInteger

运算精度,日期计算工具类

一笑奈何 提交于 2020-01-21 02:59:10
Java表达式运算用AviatorEvaluator,BigDecimal可以设置运算精度,结果精度 //5位精度运算 结果保留2位小数 BigDecimal formulaStrValue = new BigDecimal(AviatorEvaluator.execute(formulaStr, dataDerivativeMap).toString()); esDataMap.put(FuturesConstants.FUTURES_DATAVALUE, analysisdf.format(formulaStrValue)); 日期计算: JDateTime enddate = new JDateTime(new Date()); JDateTime begindate = new JDateTime(new Date()).subDay(days); 来源: CSDN 作者: y666666y 链接: https://blog.csdn.net/y666666y/article/details/104051417

关于BigDecimal的价格计算

流过昼夜 提交于 2020-01-20 02:59:18
关于BigDecimal的价格计算 public class TestBigDecimal { public static void main ( String [ ] args ) { //初始化 BigDecimal b1 = new BigDecimal ( 0.01f ) ; BigDecimal b2 = new BigDecimal ( 0.01d ) ; BigDecimal b3 = new BigDecimal ( "0.01" ) ; System . out . println ( b1 ) ; System . out . println ( b2 ) ; System . out . println ( b3 ) ; //比较 int i = b1 . compareTo ( b2 ) ; //1代表大于,0代表等于,-1代表小于 System . out . println ( i ) ; //运算 BigDecimal add = b1 . add ( b2 ) ; //加 System . out . println ( add ) ; BigDecimal subtract = b1 . subtract ( b2 ) ; //减 System . out . println ( subtract ) ; BigDecimal b4 = new

BigDecimal类

蹲街弑〆低调 提交于 2020-01-19 16:36:42
BigDecimal 是java小数操作的一个专有类,在电商、金融行业 存储跟金额有关的字段 java里面明明已经有了,float,double这种精度的小数,为什么还需要BigDecimal呢? 这难道不是多余吗? 接下来看一个例子: 1 @Test 2 public void testDoubleSimple() { 3 double a = 3; 4 double b = 10; 5 double c = a / b; 6 System.out.println(c); 7 } 控制台输出:0.3 在小数操作中,我们通常希望能有多种自由的定义方式。 例如在不同的场景可能需要返回: 0.3, 0.4, 0.333 不同精度,在不同的精度进位时希望能自主控制 这个时候,就轮到BigDecimal出场了 加减乘除 首先来一段最简单的加减乘除 1 @Test 2 public void testDecimalSimple() { 3 BigDecimal a = new BigDecimal(5); 4 BigDecimal b = new BigDecimal(40); 5 BigDecimal add = a.add(b); 6 BigDecimal subtract = a.subtract(b); 7 BigDecimal multiply = a.multiply(b); 8