关于Bigdecimal的小问题。

关于Bigdecimal的小问题。,第1张

b1:5

b2:6

b3:56

b4:57

b5:6

b6:6

b7:57

b8:57

BigDecimalROUND_DOWN:舍去多余小数位

官方解释:向零方向舍入的舍入模式。

BigDecimalROUND_HALF_DOWN:五舍六入

官方解释:向最接近数字方向舍入的舍入模式,如果与两个相邻数字的距离相等,则向下舍入。

BigDecimalROUND_UP:舍去多余小数位后最后一位+1

官方解释:远离零方向舍入的舍入模式。

BigDecimalROUND_HALF_UP:四舍五入

官方解释:向最接近数字方向舍入的舍入模式,如果与两个相邻数字的距离相等,则向上舍入。

个int怎么转换为bytes[]呢?如果一定要做也行。byte是8位的二进制,int是32位的二进制,可以将32位拆开,放入byte[]中。这就是原理。具体做法:调用Integer里面的toBinaryString()方法,将你的int转换为二进制,这个二进制是String类型的,在调用String里面的getBytes(),这样就可以将int转换为byte[]了,这题就是在玩二进制,知道就行了。

如果是用JS,就用toFixed(2)用这个函数(四舍五入保留几位数)。

如果是jsp,就用 BigDecimal mData = new BigDecimal("9655")setScale(2, BigDecimalROUND_HALF_UP);这个和上面相同,四舍五入保留几位数。如果不想保留,直接将你的数值转换成字符串,然后通过indexOf()来获取到小数点所在的位置,最后截取字符串小数点后几位小数,根据你的需求做。

Stringsplit()字符串分割的参数是正则表达式,猜测你可能是因为这个所以分割出错了

public class Test {

    public static void main(String[] args) {

        Systemoutprintln(getLength(12312));   // 32

        Systemoutprintln(getLength(236700));  // 22

        Systemoutprintln(getLength(1500));    // 20

        Systemoutprintln(getLength(1234));     // 40

    }

    private static String getLength(double num) {

        // 注意 15、15000 会被转成 150 ,请自行判断是否符合要求

        String str = StringvalueOf(num);

        String[] nums = strsplit("\\");// split方法的参数是正则表达式,所以需要转义

        int intLen = nums[0]length();

        int decimalLen = nums[1]equals("0")  0 : nums[1]length(); // 150 的情况特殊处理,小数长度设为0

        //        int decimalLen = nums[1]length(); // 小数不特殊处理

        return intLen + "" + decimalLen;

    }

}

import javamathBigDecimal;

import javautilScanner;

public class Calculator {

public static void main(String[] args) {

Calculator c = new Calculator();

while(true){

Scanner s = new Scanner(Systemin);

Systemoutprint("请输入第一个整数:");

String n1 = snext();;

if(!cisInteger(n1)){

Systemoutprintln("输入格式错误!\n");

continue;

}

Systemoutprint("请输入第二个整数:");

String n2 = snext();

if(!cisInteger(n2)){

Systemoutprintln("输入格式错误!\n");

continue;

}

Systemoutprint("请输入运算符(+、-、、/):");

String op = snext();

if(coperate(n1, n2, op)){

Systemoutprintln("运算符输入错误,退出程序。");

break;

}

}

}

public boolean operate(String num1,String num2,String op){

BigDecimal n1 = new BigDecimal(num1);

BigDecimal n2 = new BigDecimal(num2);

if(opequals("+")){

Systemoutprintln(n1add(n2));

}else if(opequals("-")){

Systemoutprintln(n1add(n2negate()));

}else if(opequals("")){

Systemoutprintln(n1multiply(n2));

}else if(opequals("/")){

Systemoutprintln(n1divide(n2));

}else{

return false;

}

return true;

}

public boolean isInteger(String num){

return nummatches("[0-9]+");

}

}

BigDecimal的除法,需要指定计算答案的精度,那样肯定会报异常。

MathContext mc = new MathContext(2, RoundingModeHALF_DOWN);

BigDecimal a = new BigDecimal(05);

BigDecimal bd1 = new;

BigDecimal("30000000000000000000000000000000000000000000000000000000000");

BigDecimal bd2 = new BigDecimal(3);

//MathContext,第一个参数表示你要保留几位小数,第二参数表示最后一位是取顶。

构造方法

BigDecimal一共有4个构造方法:

BigDecimal(int) 创建一个具有参数所指定整数值的对象。

BigDecimal(double) 创建一个具有参数所指定双精度值的对象。(不建议采用)

BigDecimal(long) 创建一个具有参数所指定长整数值的对象。

BigDecimal(String) 创建一个具有参数所指定以字符串表示的数值的对象。

以上就是关于关于Bigdecimal的小问题。全部的内容,包括:关于Bigdecimal的小问题。、怎样将BigDecimal转换成Int、jsp页面怎么截取值的位数等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

欢迎分享,转载请注明来源:内存溢出

原文地址:https://54852.com/web/9517393.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2023-04-29
下一篇2023-04-29

发表评论

登录后才能评论

评论列表(0条)

    保存