bigdecimal

BigDecimal的操作工具类

℡╲_俬逩灬. 提交于 2019-12-02 16:28:48
import java.math.BigDecimal; /** * 进行BigDecimal对象的加减乘除,四舍五入等运算的工具类 * @author ameyume * */ public class Arith { /** * 由于Java的简单类型不能够精确的对浮点数进行运算,这个工具类提供精 * 确的浮点数运算,包括加减乘除和四舍五入。 */ //默认除法运算精度 private static final int DEF_DIV_SCALE = 10; //这个类不能实例化 private Arith(){ } /** * 提供精确的加法运算。 * @param v1 被加数 * @param v2 加数 * @return 两个参数的和 */ public static double add(double v1,double v2){ BigDecimal b1 = new BigDecimal(Double.toString(v1)); BigDecimal b2 = new BigDecimal(Double.toString(v2)); return b1.add(b2).doubleValue(); } /** * 提供精确的减法运算。 * @param v1 被减数 * @param v2 减数 * @return 两个参数的差 */ public

精确运算避免使用float和double

旧城冷巷雨未停 提交于 2019-12-02 16:20:49
在《你可能不知道的Java基础知识(一)》中,我提到使用浮点运算要慎重,感觉说的不够透彻,其实float和double类型主要是为科学和工程计算而设计的。他们执行的是二进制浮点运算,由于二进制的局限性,有时候无法得到准确的结果。 例如:System.out.println(2.0-1.1)将输出0.8999999999999999,而不是0.9,当然这在科学计算中无关紧要,通过四舍五入就可以轻松解决问题,但是在禁止出现舍入误差的运算中(比如金融计算)就不适用了。 在二进制中无法精确地表示10的任何负数次方值,比如0.1,这和十进制中无法精确表示1/3一个道理,所以越到像金融货币计算的问题,我们不得不舍弃float和double,而改BigDecimal类。 在《Effective Java》这本书中也提到这个原 则,float和double只能用来做科学计算或者是工程计算,在商业计算中我们要用java.math.BigDecimal,而且非要用 String来够造BigDecimal不可!在《Effective Java》一书中的例子是用String来够造BigDecimal的,但是书上 却没有强调这一点,这也许是一个小小的失误吧。 用BigDecimal解决上述2.0-1.1问题的代码为: import java.math.*; class BigDecimalTest {

BigDecimal加减乘除计算

天涯浪子 提交于 2019-12-02 16:19:31
BigDecimal的运算——加减乘除 首先是bigdecimal的初始化 这里对比了两种形式,第一种直接value写数字的值,第二种用string来表示 BigDecimal num1 = new BigDecimal(0.005); BigDecimal num2 = new BigDecimal(1000000); BigDecimal num3 = new BigDecimal(-1000000); //尽量用字符串的形式初始化 BigDecimal num12 = new BigDecimal("0.005"); BigDecimal num22 = new BigDecimal("1000000"); BigDecimal num32 = new BigDecimal("-1000000"); 我们对其进行加减乘除绝对值的运算 其实就是Bigdecimal的类的一些调用 加法 add()函数 减法subtract()函数 乘法multiply()函数 除法divide()函数 绝对值abs()函数 我这里承接上面初始化Bigdecimal分别用string和数进行运算对比 //加法 BigDecimal result1 = num1.add(num2); BigDecimal result12 = num12.add(num22); //减法 BigDecimal

Android自定义View之滑动取值条

*爱你&永不变心* 提交于 2019-12-02 13:47:13
Android自定义View之滑动取值条 1 : 需求 可自定义更改滑动条的样式(本功能实现两种样式) 联动方式 : 滑块上更新的值通过回调给Edittext; 在Edittext上输入值,更新滑动条的游标的位置和值 高度复合性: 可根据需求,自初始化值,及返回值的调整,显示精度的可调整性 ,超过滑动范围的可调整性 滑动取值条的取值方式: 可滑动,可点击 当值过大时,取值条上的值根据像素比例进行相应的缩放,使其显示完全 2: 实现 public CustomTakeValueArticle (Context context, AttributeSet attrs, int defStyle) { super (context, attrs, defStyle); init(context); } public CustomTakeValueArticle (Context context, AttributeSet attrs) { super (context, attrs); init(context); } 上面的代码这里只构造了两个方法 初始化init(Context context)的实现如下: /** * 初始化 * * @param context */ private void init(Context context) { mTrunkBmp =

数学类

谁说我不能喝 提交于 2019-12-02 13:06:41
一、java.math.BigDecimal类 1. 概述 在Java语言中,描述浮点数使用float 类型 和 double类型。 但是float 类型 和 double类型都会有误差,为了实现精确计算。可以使用java.math.BigDecimal类 加以描述。 2. 常用方法 (和差积商) 构造方法: BigDecimal( String val ) -根据参数指定的字符串来 构造对象 BigDecimal add( BigDecimal augend ) -返回 计算调用对象 和 参数对象的 和 BigDecimal subtract( BigDecimal subtrahend ) - 返回 计算调用对象 和 参数对象的 差 BigDecimal multiply( BigDecimal multiplicand ) -返回 计算调用对象 和 参数对象的 积 BigDecimal divide( BigDecimal divisor ) - -返回 计算调用对象 和 参数对象的 商 代码演示: import java.math.BigDecimal; public class BigDecimalTest { public static void main(String[] args) { // 创建两个 BigDecimal类型的对象 BigDecimal bd1 =

恩佐夫博弈+JAVA大数

回眸只為那壹抹淺笑 提交于 2019-12-02 12:41:20
题意: http://acm.hdu.edu.cn/showproblem.php?pid=5973 根号5复制后200位就行了,因为BigDecimal不支持开根号,除法二分开根。 1 import java.io.FileInputStream; 2 import java.io.PrintStream; 3 import java.math.BigDecimal; 4 import java.math.BigInteger; 5 import java.util.Scanner; 6 import java.util.*; 7 8 public class Main{ 9 // static private final String INPUT="C:\\Users\\13606\\Desktop\\草稿.txt"; 10 // static private final String OUTPUT="C:/output.txt"; 11 public static void main(String[] args){ 12 // FileInputStream instream=null; 13 // PrintStream outstream=null; 14 /* try{ 15 instream=new FileInputStream(INPUT); 16 System

DecimalFormat is being overridden by server settings

做~自己de王妃 提交于 2019-12-02 10:44:20
Currently I'm having a problem displaying formatted decimals. In my local machine I have a decimal value: 0.002100000000 stored in database. <h:outputText value="0.002100000000" converter="#{bigDecimal4DigitsConverter}" /> @FacesConverter("bigDecimal4DigitsConverter") public class BigDecimal4DigitsConverter extends BigDecimalConverter { private DecimalFormat format = new DecimalFormat("#,##0.0000"); @Override protected DecimalFormat getDecimalFormat() { return format; } } My problem is on my local machine it displays: 0.0021 - US Settings But in another server 0,0021 - French Settings Why is

Spring Batch : PassThroughFieldExtractor with BigDecimal formatting

十年热恋 提交于 2019-12-02 10:17:23
I'm using Spring Batch to extract a CSV file from a DB table which has a mix of column types. The sample table SQL schema is [product] [varchar](16) NOT NULL, [version] [varchar](16) NOT NULL, [life_1_dob] [date] NOT NULL, [first_itm_ratio] [decimal](9,6) NOT NULL, the sample Database column value for the 'first_itm_ration' field are first_itm_ratio 1.050750 0.920000 but I would like my CSV to drop the trailing zero's from values. first_itm_ratio 1.05075 0.92 I'd prefer not to have to define the formatting for each specific field in the table, but rather have a global object specific

Can't put Double number in BigDecimal variable

北城以北 提交于 2019-12-02 08:35:22
I'm using a Double variable which holds the Item price. That variable is stored in postgresql database under a column of money type. I use setBigDecimal(position,value) SQL function.In other part, i'm using a JSpinner as input. Double current = 0.0; Double min = (double) Integer.MIN_VALUE; Double max = (double) Integer.MAX_VALUE; Double step = 0.1; JSpinner priceSpinner = new JSpinner(new SpinnerNumberModel(current, min, max, step)); When the user clicks on a button, I get the value entred by the user and put it in the database via SQL query. insertStmt.setBigDecimal(position,BigDecimal

BigDecimal用法

此生再无相见时 提交于 2019-12-02 05:46:13
1. ROUND_DOWN BigDecimal b = new BigDecimal("2.225667").setScale(2, BigDecimal.ROUND_DOWN); System.out.println(b);//2.22 直接去掉多余的位数 2. ROUND_UP BigDecimal c = new BigDecimal("2.224667").setScale(2, BigDecimal.ROUND_UP); System.out.println(c);//2.23 跟上面相反,进位处理 3. ROUND_CEILING 天花板(向上),正数进位向上,负数舍位向上 BigDecimal f = new BigDecimal("2.224667").setScale(2, BigDecimal.ROUND_CEILING); System.out.println(f);//2.23 如果是正数,相当于BigDecimal.ROUND_UP BigDecimal g = new BigDecimal("-2.225667").setScale(2, BigDecimal.ROUND_CEILING); System.out.println(g);//-2.22 如果是负数,相当于BigDecimal.ROUND_DOWN 4. ROUND_FLOOR 地板(向下