关于对一组数据进行四舍五入的处理

由于在一个政府合作的项目中用到了大量的数据计算,对数据的处理要求极高,平时我们要求的都是四舍五入来处理数据,这个完全可以用安卓的api来进行做到:

 安卓api的四舍五入:

import java.math.BigDecimal;
  

//参数scale,要保留的位数
    public static double round(double num, int scale) {
        BigDecimal bd = new BigDecimal(num);
        return bd.divide(new BigDecimal(1), scale, BigDecimal.ROUND_HALF_UP).doubleValue();
    }
    public static BigDecimal round(String num, int scale) {
        BigDecimal bd = new BigDecimal(num);
        return bd.divide(new BigDecimal(1), scale, BigDecimal.ROUND_HALF_UP);
    }

但我们的需求有点变态,需要根据用户输入的一组数据来进行计算,要求四舍六入五考虑,五前为0则舍去,五后非零则进一,还有一个要求是,如果一组数据里面有一个小数点,则对应算出该组数的平均值应该为小数点后2位,,依次类推

 

//参数values是所有的原始数据

public static float get(String[] values, String f) { //封装四舍五考虑六入,参数是保留的小数点位数

int num = 0;

for (int i = 0; i < values.length; i++) {

if (ConfirmDataType.isNumber(values[i])) {

if (values[i].contains(".")) {

if (num <= values[i].substring(values[i].indexOf(".") + 1).length()) {

num = values[i].substring(values[i].indexOf(".") + 1).length();

}

}

}

}

int dot2 = num - 1;

if (f.contains(".")) { //计算的有小数

int len1 = f.substring(f.indexOf(".") + 1).length();

if (len1 < dot2) {

// StringBuilder builder=new StringBuilder(f);

for (int i = 0; i < dot2 - len1 + 1; i++) {

// builder.append("0");

f = f + "0";

}

// f=builder.toString();

} else if (len1 == dot2) {

f = f;

} else if (len1 > dot2) { //当计算结果位数大于应该保留的小数位数时,进行四舍六入判断

if (dot2 + 1 < len1) {

//四舍六入五考虑

String s = f.substring(f.indexOf(".") + dot2 + 2, f.indexOf(".") + dot2 + 3);

int c = Integer.parseInt(s);

if (c <= 4) { //四舍

f = f.split(dot_marker)[0] + "." + f.substring(f.indexOf(".") + 1, f.indexOf(".") + 1 + dot2 + 1);

if (f.substring(f.length() - 1).equals(".")) f = f.replace(".", "");

} else if (c == 5) { //五考虑

if (len1 - dot2 - 1 == 1) {//5后皆0视奇偶

if (ConfirmDataType.isNumber(f.substring(f.indexOf(".") + dot2 + 1, f.indexOf(".") + dot2 + 2))) {

int i = Integer.parseInt(f.substring(f.indexOf(".") + dot2 + 1, f.indexOf(".") + dot2 + 2));

if (i % 2 == 0) { //5前为偶则舍去

f = f.split(dot_marker)[0] + "." + f.substring(f.indexOf(".") + 1, f.indexOf(".") + 1 + dot2 + 1);

if (f.substring(f.length() - 1).equals("."))

f = f.replace(".", "");

} else { //5前为奇则进一

f = f.split(dot_marker)[0] + "." + f.substring(f.indexOf(".") + 1, f.indexOf(".") + 1 + dot2 + 1);

f = f.replace(".", "");

String[] item = new String[f.length()];

for (int w = 0; w < item.length; w++) {

item[w] = f.substring(w, w + 1);

}

if (item.length > 0) {

if (Long.parseLong(item[item.length - 1]) < 9) {

item[item.length - 1] = Long.parseLong(item[item.length - 1]) + 1 + "";

} else {

if (f.substring(0, 1).equals("0")) { //首位为0

f = "1" + f;

f = Long.parseLong(f) + 1 + "";

f = f.substring(1);

} else {

f = Long.parseLong(f) + 1 + "";

}

// TODO: 2017/10/19 0019

if (f.length() > item.length) {

item = new String[f.length()];

}

for (int w = 0; w < item.length; w++) {

item[w] = f.substring(w, w + 1);

}

}

}

StringBuilder b = new StringBuilder();

for (int w = 0; w < item.length; w++) {

if (item.length - (dot2 + 1) == w) {

b.append(".");

b.append(item[w]);

} else {

b.append(item[w]);

}

}

f = b.toString();

}

} else {

f = f.substring(0, f.indexOf("."));

if (ConfirmDataType.isNumber(f.substring(f.length() - 1))) {

if (Integer.parseInt(f.substring(f.length() - 1)) % 2 == 0) {

f = f;

} else { //5前为奇数则进一

f = Long.parseLong(f) + 1 + "";

}

}

}

} else { //5后非零进一

f = f.split(dot_marker)[0] + "." + f.substring(f.indexOf(".") + 1, f.indexOf(".") + 1 + dot2 + 1);

f = f.replace(".", "");

String[] item = new String[f.length()];

for (int i = 0; i < item.length; i++) {

item[i] = f.substring(i, i + 1);

}

if (item.length > 0) {

if (Long.parseLong(item[item.length - 1]) < 9) {

item[item.length - 1] = Long.parseLong(item[item.length - 1]) + 1 + "";

} else {

if (f.substring(0, 1).equals("0")) { //首位为0

f = "1" + f;

f = Long.parseLong(f) + 1 + "";

f = f.substring(1);

} else {

f = Long.parseLong(f) + 1 + "";

}

// TODO: 2017/10/19 0019

if (f.length() > item.length) {

item = new String[f.length()];

}

for (int i = 0; i < item.length; i++) {

item[i] = f.substring(i, i + 1);

}

}

}

StringBuilder b = new StringBuilder();

for (int i = 0; i < item.length; i++) {

if (item.length - (dot2 + 1) == i) {

b.append(".");

b.append(item[i]);

} else {

b.append(item[i]);

}

}

f = b.toString();

}

} else if (c > 5) { //六入

f = f.split(dot_marker)[0] + "." + f.substring(f.indexOf(".") + 1, f.indexOf(".") + 1 + dot2 + 1);

f = f.replace(".", "");

String[] item = new String[f.length()];

for (int i = 0; i < item.length; i++) {

item[i] = f.substring(i, i + 1);

}

if (item.length > 0) {

if (Long.parseLong(item[item.length - 1]) < 9) {

item[item.length - 1] = Long.parseLong(item[item.length - 1]) + 1 + "";

} else {

if (f.substring(0, 1).equals("0")) { //首位为0

f = "1" + f;

f = Long.parseLong(f) + 1 + "";

f = f.substring(1);

} else {

f = Long.parseLong(f) + 1 + "";

}

// TODO: 2017/10/19 0019

if (f.length() > item.length) {

item = new String[f.length()];

}

for (int i = 0; i < item.length; i++) {

// TODO: 2017/8/21 0021 java.lang.StringIndexOutOfBoundsException: length=2; regionStart=2; regionLength=1

item[i] = f.substring(i, i + 1);

}

}

}

StringBuilder b = new StringBuilder();

for (int i = 0; i < item.length; i++) {

if (item.length - (dot2 + 1) == i) {

b.append(".");

b.append(item[i]);

} else {

b.append(item[i]);

}

}

f = b.toString();

}

} else if (dot2 + 1 == len1) {

f = f;

}

}

} else { //计算的平均值没有小数

// StringBuilder builder=new StringBuilder(f);

for (int i = 0; i < dot2; i++) {

if (i == 0) {

// builder.append(".0");

f = f + ".0";

} else {

// builder.append("0");

f = f + "0";

}

}

// f=builder.toString();

}

if (ConfirmDataType.isNumber(f)) {

return Float.parseFloat(f);

} else {

return 1f;

}

}

 

public static float get(int num, String f) { //封装四舍五考虑六入,参数是保留的小数点位数

int dot2 = num - 1;

if (f.contains(".")) { //计算的标准差有小数

int len1 = f.substring(f.indexOf(".") + 1).length();

if (len1 < dot2) {

// StringBuilder builder=new StringBuilder(f);

for (int i = 0; i < dot2 - len1 + 1; i++) {

// builder.append("0");

f = f + "0";

}

// f=builder.toString();

} else if (len1 == dot2) {

f = f;

} else if (len1 > dot2) { //当计算结果位数大于应该保留的小数位数时,进行四舍六入判断

if (dot2 + 1 < len1) {

//四舍六入五考虑

String s = f.substring(f.indexOf(".") + dot2 + 2, f.indexOf(".") + dot2 + 3);

int c = Integer.parseInt(s);

if (c <= 4) { //四舍

f = f.split(dot_marker)[0] + "." + f.substring(f.indexOf(".") + 1, f.indexOf(".") + 1 + dot2 + 1);

if (f.substring(f.length() - 1).equals(".")) f = f.replace(".", "");

} else if (c == 5) { //五考虑

if (len1 - dot2 - 1 == 1) {//5后皆0视奇偶

if (ConfirmDataType.isNumber(f.substring(f.indexOf(".") + dot2 + 1, f.indexOf(".") + dot2 + 2))) {

int i = Integer.parseInt(f.substring(f.indexOf(".") + dot2 + 1, f.indexOf(".") + dot2 + 2));

if (i % 2 == 0) { //5前为偶则舍去

f = f.split(dot_marker)[0] + "." + f.substring(f.indexOf(".") + 1, f.indexOf(".") + 1 + dot2 + 1);

if (f.substring(f.length() - 1).equals("."))

f = f.replace(".", "");

} else { //5前为奇则进一

f = f.split(dot_marker)[0] + "." + f.substring(f.indexOf(".") + 1, f.indexOf(".") + 1 + dot2 + 1);

f = f.replace(".", "");

String[] item = new String[f.length()];

for (int w = 0; w < item.length; w++) {

item[w] = f.substring(w, w + 1);

}

if (item.length > 0) {

if (Long.parseLong(item[item.length - 1]) < 9) {

item[item.length - 1] = Long.parseLong(item[item.length - 1]) + 1 + "";

} else {

if (f.substring(0, 1).equals("0")) { //首位为0

f = "1" + f;

f = Long.parseLong(f) + 1 + "";

f = f.substring(1);

} else {

f = Long.parseLong(f) + 1 + "";

}

// TODO: 2017/10/19 0019

if (f.length() > item.length) {

item = new String[f.length()];

}

for (int w = 0; w < item.length; w++) {

item[w] = f.substring(w, w + 1);

}

}

}

StringBuilder b = new StringBuilder();

for (int w = 0; w < item.length; w++) {

if (item.length - (dot2 + 1) == w) {

b.append(".");

b.append(item[w]);

} else {

b.append(item[w]);

}

}

f = b.toString();

}

} else {

f = f.substring(0, f.indexOf("."));

if (ConfirmDataType.isNumber(f.substring(f.length() - 1))) {

if (Integer.parseInt(f.substring(f.length() - 1)) % 2 == 0) {

f = f;

} else { //5前为奇数则进一

f = Long.parseLong(f) + 1 + "";

}

}

}

} else { //5后非零进一

f = f.split(dot_marker)[0] + "." + f.substring(f.indexOf(".") + 1, f.indexOf(".") + 1 + dot2 + 1);

f = f.replace(".", "");

String[] item = new String[f.length()];

for (int i = 0; i < item.length; i++) {

item[i] = f.substring(i, i + 1);

}

if (item.length > 0) {

if (Long.parseLong(item[item.length - 1]) < 9) {

item[item.length - 1] = Long.parseLong(item[item.length - 1]) + 1 + "";

} else {

if (f.substring(0, 1).equals("0")) { //首位为0

f = "1" + f;

f = Long.parseLong(f) + 1 + "";

f = f.substring(1);

} else {

f = Long.parseLong(f) + 1 + "";

}

// TODO: 2017/10/19 0019

if (f.length() > item.length) {

item = new String[f.length()];

}

for (int i = 0; i < item.length; i++) {

item[i] = f.substring(i, i + 1);

}

}

}

StringBuilder b = new StringBuilder();

for (int i = 0; i < item.length; i++) {

if (item.length - (dot2 + 1) == i) {

b.append(".");

b.append(item[i]);

} else {

b.append(item[i]);

}

}

f = b.toString();

}

} else if (c > 5) { //六入

f = f.split(dot_marker)[0] + "." + f.substring(f.indexOf(".") + 1, f.indexOf(".") + 1 + dot2 + 1);

f = f.replace(".", "");

String[] item = new String[f.length()];

for (int i = 0; i < item.length; i++) {

item[i] = f.substring(i, i + 1);

}

if (item.length > 0) {

if (Long.parseLong(item[item.length - 1]) < 9) {

item[item.length - 1] = Long.parseLong(item[item.length - 1]) + 1 + "";

} else {

if (f.substring(0, 1).equals("0")) { //首位为0

f = "1" + f;

f = Long.parseLong(f) + 1 + "";

f = f.substring(1);

} else {

f = Long.parseLong(f) + 1 + "";

}

// TODO: 2017/10/19 0019

if (f.length() > item.length) {

item = new String[f.length()];

}

for (int i = 0; i < item.length; i++) {

// TODO: 2017/8/21 0021 java.lang.StringIndexOutOfBoundsException: length=2; regionStart=2; regionLength=1

item[i] = f.substring(i, i + 1);

}

}

}

StringBuilder b = new StringBuilder();

for (int i = 0; i < item.length; i++) {

if (item.length - (dot2 + 1) == i) {

b.append(".");

b.append(item[i]);

} else {

b.append(item[i]);

}

}

f = b.toString();

}

} else if (dot2 + 1 == len1) {

f = f;

}

}

} else { //计算的平均值没有小数

// StringBuilder builder=new StringBuilder(f);

for (int i = 0; i < dot2; i++) {

if (i == 0) {

// builder.append(".0");

f = f + ".0";

} else {

// builder.append("0");

f = f + "0";

}

}

// f=builder.toString();

}

if (ConfirmDataType.isNumber(f)) {

return Float.parseFloat(f);

} else {

return 1f;

}

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值