构造方法 MathContext(int setPrecision, RoundingMode setRoundingMode) 构造一个新的 MathContext ,它具有指定的精度和舍入模式 MathContext(int setPrecision) 构造一个新的 MathContext,它具有指定的精度和 HALF_UP 舍入模式 调用上一个构造方法 MathContext(String val) 根据字符串构造一个新的 MathContext 注意:该字符串的格式必须与 常量 我们刚才已经说明,MathContext 就是针对于运算中的一些规则进行描述的类型 对于一些规定,已经内置了几个静态对象供我们使用 static MathContext DECIMAL128 总结 RoundingMode 与MathContext 是针对舍入模式以及运算规则的一个抽象 RoundingMode 就是个枚举 MathContext 他在使用上也可以理解为"常量" 一样的存在
BigDecimal abs(MathContext mc) 返回一个 BigDecimal ,其值为此 BigDecimal的绝对值,根据上下文设置进行舍入。 BigDecimal negate(MathContext mc) 返回 BigDecimal ,其值是 (-this) ,根据上下文设置进行舍入。 BigDecimal plus(MathContext mc) 返回 BigDecimal ,其值是 (+this) ,根据上下文设置进行舍入。 BigDecimal pow(int n, MathContext mc) 返回 BigDecimal ,其值是 (thisn)。 BigDecimal round(MathContext mc) 返回 BigDecimal根据四舍五入 MathContext设置。 int scale() 返回此 规模 BigDecimal 。
(6)); System.out.println("result1="+result1); BigDecimal result2 = BigDecimalMath.log2(num1, new MathContext (6)); System.out.println("result2="+result2); BigDecimal result3 = BigDecimalMath.log10(num1, new MathContext (6)); System.out.println("result1="+result1); BigDecimal result2 = BigDecimalMath.cos(num1, new MathContext (6)); System.out.println("result2="+result2); BigDecimal result3 = BigDecimalMath.tan(num1, new MathContext (6)); System.out.println("result3="+result3); BigDecimal result4 = BigDecimalMath.cot(num1, new MathContext
对于BigDecimals您可以同时指定舍入模式和精度,但有一个更方便的方法 - 您可以使用MathContext代替,其中包含精度和舍入的信息。 MathContext.UNLIMITED是一个缺省的MathContext值。但是不要使用它,它等同于一点没有上下文。 你可以使用MathContext进行加减运算,但是对于乘除最好规定一个DECIMAL*上下文,它们是必需的,因为当运算结果有一个无限长的十进制扩展,这些操作需要指定精度。 下面是运算同样算术的性能比较: double0.018秒no MathContext4.1秒MathContext.UNLIMITED3.9秒MathContext.DECIMAL324.2秒MathContext.DECIMAL649.5 秒MathContext.DECIMAL12813.9秒 最后,如果你想将一个浮点数转为字符串,好像很容易,实际相当困难,你需要知道的浮点数的二进制表示形式(IEEE-754)。
import java.math.BigDecimal; import java.math.MathContext; public class a { public static void main String[] args){ BigDecimal a = BigDecimal.valueOf(1).divide(BigDecimal.valueOf(6) ,new MathContext
)));10 //正数向正无穷大取整,负数向负无穷大取整 11 System.out.println(“up a:” + new BigDecimal(0.121, new MathContext(2, (1, RoundingMode.HALF_EVEN)));34 System.out.println(“odd b:” + new BigDecimal(5.5, new MathContext(1, (1, RoundingMode.HALF_EVEN)));41 System.out.println(“even b:” + new BigDecimal(6.6, new MathContext(1 在跟进到divide函数内部时,发现了构造MathContext的部分内容: 1 MathContext mc = new MathContext( (int)Math.min(this.precision 值不固定 根据MathContext的第一个参数的计算方式得到默认除法精度: 1. 当被除数为:0x1 最低精度5 2.
mc) 将 BigInteger 非标度值和 int 标度转换为 BigDecimal (根据上下文设置进行舍入) BigDecimal(BigInteger val,MathContext mc) 将 BigInteger 转换为 BigDecimal(根据上下文设置进行舍入) BigDecimal(char[] in, int offset, int len, MathContext mc) BigDecimal(long val, MathContext mc) long 转换为 BigDecimal根据上下文设置进行舍入 BigDecimal(double val) double 转换为 BigDecimal BigDecimal(double val, MathContext mc) double 转换为 BigDecimal根据上下文设置进行舍入 构造方法注意事项 BigDecimal (+this) 的 BigDecimal(根据上下文设置进行舍入)方法的效果与 round(MathContext) 方法的效果相同 BigDecimal round(MathContext mc)等同于
BigDecimal(BigInteger val, MathContext mc)根据上下文设置将 BigInteger转换为 BigDecimal舍入。 BigDecimal(double val, MathContext mc)将 double转换为 BigDecimal ,根据上下文设置进行舍入。 BigDecimal(int val, MathContext mc)将 int转换为 BigDecimal ,根据上下文设置进行舍入。 BigDecimal(long val, MathContext mc)将 long转换为 BigDecimal ,根据上下文设置进行舍入。
*/ public BigDecimal subtract(BigDecimal subtrahend, MathContext mc) { // MathContext 的= MathContext(2) val random = Random() val prices = listOf( Quote("CTXS", BigDecimal (82.26, mathContext)), Quote("DELL", BigDecimal(63.74, mathContext)), Quote(" GOOG", BigDecimal(847.24, mathContext)), Quote("MSFT", BigDecimal(65.11, mathContext)), Quote("ORCL", BigDecimal(45.71, mathContext)), Quote("RHT", BigDecimal(84.29, mathContext )), Quote("VMW", BigDecimal(92.21, mathContext)) ) fun fetchQuoteStream(period:
) == -1){ a } if(a.compareTo(b)==0){ a=b; } if(a.compareTo(b)==1){ a>b; } public static MathContext mc = new MathContext(); public static BigDecimal add(BigDecimal a1,BigDecimal a2){ a1=null2Zero
BigDecimal基本使用 2.1 常见构造方法 方法 描述 BigDecimal(int val) 将int转换成BigDecimal BigDecimal(int val, MathContext long转换成BigDecimal BigDecimal(double) 将double转换成BigDecimal BigDecimal(String) 将String转换成BigDecimal MathContext 返回负数表示是一个正数,且有负数位0 stripTrailingZeros() 除去末尾的零,包含整数 add(BigDecimal augend) 被加数 add(BigDecimal augend, MathContext ; System.out.println(num1.subtract(num2)); // 小数保留6位,四舍五入 System.out.println(num1.multiply(num2,new MathContext (6, RoundingMode.HALF_UP))); // 小数保留4位,直接截取 System.out.println(num1.divide(num2,new MathContext(4,RoundingMode.DOWN
/** * BigDecimal传double的构造函数 */ public BigDecimal(double val) { this(val,MathContext.UNLIMITED
main(String[] args) { BigDecimal x = new BigDecimal("123.56789"); x = x.round(new MathContext main(String[] args) { BigDecimal x = new BigDecimal("123111.56789"); x = x.round(new MathContext
是因为转化过程默认使用了精度和舍入模式: public BigDecimal(double val, MathContext mc) {}; 舍入模式为:public final static int
// Create a String object String numberStr; // Set precision to 5 MathContext mc = new MathContext(6); bigNumber = new BigDecimal(RandomStringUtils.randomNumeric(10)+"E5
yz.com.javautil.utilpackage;import yz.com.javautil.vo.TransformPoint;import java.math.BigDecimal;import java.math.MathContext double mgLon = fromLon + dLon; transformRes.put("lon", new BigDecimal(mgLon + "", new MathContext RoundingMode.HALF_UP)).doubleValue()); transformRes.put("lat", new BigDecimal(mgLat + "", new MathContext
54Simo/Java-Tutorial.git Arithmetic.java package cn.simo; import java.math.BigDecimal; import java.math.MathContext null; /* * 设置精度,否则报错(计算机并不知道要保留几位,所以很干脆的报错) * By 刘立伟 */ MathContext mc = new MathContext(2, RoundingMode.HALF_DOWN); //精度为2,舍入模式为大于0.5进1,否则舍弃。
val.length()); } 看得出来,这里没做什么,然后直接调用了重载的构造方法: public BigDecimal(char[] in, int offset, int len) { //MathContext.UNLIMITED 这个在老版本中有使用,新版本没有使用了 this(in,offset,len,MathContext.UNLIMITED); } 继续调用重载的方法: /** * 将 BigDecimal param len 要考虑的字符数 * @param mc 没有使用 */ public BigDecimal(char[] in, int offset, int len, MathContext
以下是一个简单的Java代码示例,用于计算黎曼 \zeta 函数在某些点的值: import java.math.BigDecimal; import java.math.MathContext; import java.math.RoundingMode; public class RiemannZetaFunction { private static final MathContext MC = new MathContext(100, RoundingMode.HALF_UP); public static BigDecimal zetaFunction(double real
BigDecimal bigNumber; // Create a String object String numberStr; // Set precision to 5 MathContext mc = new MathContext(6); bigNumber = new BigDecimal(RandomStringUtils.randomNumeric(10)+"E5", mc