package com.org.assistant.util;
import java.math.BigDecimal;
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 static double sub(double v1,double v2){
BigDecimal b1 = new BigDecimal(Double.toString(v1));
BigDecimal b2 = new BigDecimal(Double.toString(v2));
return b1.subtract(b2).doubleValue();
}
/**
* 提供精确的乘法运算。
* @param v1 被乘数
* @param v2 乘数
* @return 两个参数的积
*/
public static double mul(double v1,double v2){
BigDecimal b1 = new BigDecimal(Double.toString(v1));
BigDecimal b2 = new BigDecimal(Double.toString(v2));
return b1.multiply(b2).doubleValue();
}
/**
* 提供(相对)精确的除法运算,当发生除不尽的情况时,精确到
* 小数点以后10位,以后的数字四舍五入。
* @param v1 被除数
* @param v2 除数
* @return 两个参数的商
*/
public static double div(double v1,double v2){
return div(v1,v2,DEF_DIV_SCALE);
}
/**
* 提供(相对)精确的除法运算。当发生除不尽的情况时,由scale参数指
* 定精度,以后的数字四舍五入。
* @param v1 被除数
* @param v2 除数
* @param scale 表示表示需要精确到小数点以后几位。
* @return 两个参数的商
*/
public static double div(double v1,double v2,int scale){
if(scale<0){
throw new IllegalArgumentException(
"The scale must be a positive integer or zero");
}
BigDecimal b1 = new BigDecimal(Double.toString(v1));
BigDecimal b2 = new BigDecimal(Double.toString(v2));
return b1.divide(b2,scale,BigDecimal.ROUND_HALF_UP).doubleValue();
}
/**
* 提供精确的小数位四舍五入处理。
* @param v 需要四舍五入的数字
* @param scale 小数点后保留几位
* @return 四舍五入后的结果
*/
public static double round(double v,int scale){
if(scale<0){
throw new IllegalArgumentException(
"The scale must be a positive integer or zero");
}
BigDecimal b = new BigDecimal(Double.toString(v));
BigDecimal one = new BigDecimal("1");
return b.divide(one,scale,BigDecimal.ROUND_HALF_UP).doubleValue();
}
/**
* 提供精确的类型转换(Float)
* @param v 需要被转换的数字
* @return 返回转换结果
*/
public static float convertsToFloat(double v){
BigDecimal b = new BigDecimal(v);
return b.floatValue();
}
/**
* 提供精确的类型转换(Int)不进行四舍五入
* @param v 需要被转换的数字
* @return 返回转换结果
*/
public static int convertsToInt(double v){
BigDecimal b = new BigDecimal(v);
return b.intValue();
}
/**
* 提供精确的类型转换(Long)
* @param v 需要被转换的数字
* @return 返回转换结果
*/
public static long convertsToLong(double v){
BigDecimal b = new BigDecimal(v);
return b.longValue();
}
/**
* 返回两个数中大的一个值
* @param v1 需要被对比的第一个数
* @param v2 需要被对比的第二个数
* @return 返回两个数中大的一个值
*/
public static double returnMax(double v1,double v2){
BigDecimal b1 = new BigDecimal(v1);
BigDecimal b2 = new BigDecimal(v2);
return b1.max(b2).doubleValue();
}
/**
* 返回两个数中小的一个值
* @param v1 需要被对比的第一个数
* @param v2 需要被对比的第二个数
* @return 返回两个数中小的一个值
*/
public static double returnMin(double v1,double v2){
BigDecimal b1 = new BigDecimal(v1);
BigDecimal b2 = new BigDecimal(v2);
return b1.min(b2).doubleValue();
}
/**
* 精确对比两个数字
* @param v1 需要被对比的第一个数
* @param v2 需要被对比的第二个数
* @return 如果两个数一样则返回0,如果第一个数比第二个数大则返回1,反之返回-1
*/
public static int compareTo(double v1,double v2){
BigDecimal b1 = new BigDecimal(v1);
BigDecimal b2 = new BigDecimal(v2);
return b1.compareTo(b2);
}
}
分享到:
相关推荐
Java中BigInteger的数学运算,BigDecimal 加减乘除运算,Java在java.math包中提供的API类BigDecimal,用来对超过16位有效位的数进行精确的运算。双精度浮点型变量double可以处理16位有效数。在实际应用中,需要对更大...
本文将详细介绍如何使用`BigDecimal`实现加减乘除运算。 首先,`BigDecimal`有多种构造方法,这里主要提及两种: 1. `BigDecimal(double val)`:将一个`double`类型的值转换为`BigDecimal`对象。但需要注意的是,...
本篇文章将详细探讨`BigDecimal`在加减乘除运算中的应用及其注意事项。 首先,`BigDecimal`对象的初始化有两种常见方式。一种是直接传入一个数字,如`new BigDecimal(0.005)`,另一种是传入一个字符串,如`new ...
BigDecimal 类在 Java 中被设计用来处理高精度的浮点数运算,主要应用于财务、金融等领域,因为这些场景中对精度要求非常高。BigDecimal 提供了加法(add())、减法(subtract())、乘法(multiply())和除法...
JS小数加减乘除运算后小数点后产生多位数和计算精度损失的解决方案
例如,你可以创建一个复数类并重载`+`和`-`运算符,使得复数的加减操作更加自然。 总结,Kotlin中的四则运算是基础但关键的编程概念,理解它们的使用方法和特性对于编写高效、安全的代码至关重要。通过合理运用这些...
总的来说,精确的加减乘除算法在Java编程中主要通过BigDecimal类来实现,它能够解决浮点数运算的精度问题,适用于金融、科学计算等对精度要求高的场景。使用这样的工具类,开发者可以避免因为数据类型的限制而产生的...
加减乘除的运算符需要被适当地解析和执行,考虑到连续运算,可能需要保存当前的运算状态,例如通过栈数据结构存储中间结果。 4. **EditText与TextView**:EditText用于显示用户输入的数字,TextView则用于显示计算...
8. **运算效率**:连续多次使用`add()`、`subtract()`等方法可能会导致大量中间对象的生成,可以考虑使用`BigDecimal`的`stripTrailingZeros()`方法减少对象数量。 综上,`BigDecimal`是Java中处理精确数值计算的...
唔,其实里面就是一个工具类,加减乘除、保留两位小数。一共5个方法。。。emmmm.....为啥分这么高呢。因为宝宝想分想疯了。 附代码,有土豪就打赏打赏,没土豪的直接拿去使吧。 package cn.cisdom.base.utils; ...
Java 中的 BigDecimal 类提供了对浮点数的精确运算,包括加减乘除和四舍五入等操作。在 Java 中,简单类型不能够精确地对浮点数进行运算,因此需要使用 BigDecimal 类来提供精确的浮点数运算。 加法运算 在 Java ...
当需要进行加减乘除操作时,`BigDecimal` 不支持直接使用传统的算术运算符(+、-、*、/),而是需要调用相应的方法来执行这些操作。以下是 `BigDecimal` 进行加减乘除的基本用法: 1. **加法**:使用 `add()` 方法...
在实际应用中,为了方便复用和提高代码可读性,通常会封装一个工具类,如示例中的`Arith`类,它包含了一系列静态方法,分别处理加、减、乘、除操作。例如: ```java public class Arith { public static double ...
本文将详细探讨如何使用Java语言实现一个简单的计算器,支持加减乘除、开方以及求倒数等功能。 首先,我们需要了解Java的基础语法和控制结构。Java是一种面向对象的编程语言,它的类和对象概念是实现功能的关键。在...
例如,他们可能选择了使用大数库,以保证在进行加减乘除时,无论是简单的小数还是复杂的运算,都能得到精确的结果。此外,他们可能还考虑了用户的需求,提供了一定的精度设置选项,让用户可以根据实际需要调整计算的...
`BigDecimal`提供了构造函数来创建任意精度的数字,以及多种方法来进行加、减、乘、除等运算,并且可以控制舍入模式,避免浮点数运算中的精度损失问题。 在项目描述中提到了“运用了类的特性”,这通常意味着项目中...
实际应用中,Java的`BigInteger`类提供了完整的功能,包括加减乘除和其他高级运算,而且性能经过优化,建议在处理大数运算时优先考虑使用。 总的来说,通过数组实现大数运算是一种基础的编程练习,它有助于深入理解...
这个"aaa.rar"压缩包包含的项目是创建一个Java GUI计算器,支持加、减、乘、除以及混合运算。让我们深入探讨这个项目中的关键知识点。 1. **Java Swing或JavaFX**: 为了构建GUI,开发者可能使用了Java Swing库或者...
一些工具类代码块的集合: 提供精确的加法运算 提供精确的减法运算 提供精确的乘法运算 精确的除法运算. 提供(相对)精确的除法运算。当发生除不尽的情况时,由...取余数 BigDecimal 比较大小 获取自己想要的数据格式
JavaScript中的加减乘除运算时,尤其是涉及到小数点的运算,常常会出现精度丢失的问题,这个问题是由于JavaScript采用IEEE 754标准对浮点数进行二进制表示所引起的。在实际编程中,这种精度问题会出现在任何需要进行...