package
text.work;
public
class
四舍六入五成双 {
/*
* 单值修约
* num1:待修约值
* pre:修约后数据精度
* result:修约后结果
*/
public
static
String numRou(String num1,
int
pre){
String result =
""
;
if
(num1.contains(
"."
)&&(pre > 0)){
String[] str = num1.split(
"\\."
);
if
(str[1].length()<=pre){
StringBuffer sb =
new
StringBuffer(num1);
for
(
int
i = 0;i <(pre - str[1].length());i++){
sb.append(
"0"
);
}
result = sb.toString();
}
else
{
StringBuffer sb_add1 =
new
StringBuffer(
"0."
);
for
(
int
i = 0; i< pre -1;i++){
sb_add1.append(
"0"
);
}
sb_add1.append(
"1"
);
Double num_add1 = Double.parseDouble(sb_add1.toString());
//进1时,加此数(+1)
StringBuffer sb =
new
StringBuffer(str[0]);
sb.append(
"."
);
String str_pre = str[1].substring(0,pre);
char
str_rouDat = str[1].charAt(pre);
//精度后一位,依据此数进行舍入判定
sb.append(str_pre);
String str_rouBefore = sb.toString();
String str_odd_even = str_rouBefore.substring(str_rouBefore.length()-1);
Integer num_odd_even = Integer.parseInt(str_odd_even);
//修约后最末位,依据此位基偶判定是否+1
Double num_rou = Double.parseDouble(str_rouBefore);
if
(str_rouDat -
'5'
> 0){
//大于5进1
num_rou = num_rou + num_add1;
}
else
if
(str_rouDat -
'5'
== 0){
//等于5,留双
String strlit = str[1].substring(pre);
Double dblit = Double.parseDouble(
"0."
+strlit);
if
(dblit > 0.5){
num_rou = num_rou + num_add1;
}
else
if
(num_odd_even % 2 == 1){
num_rou = num_rou + num_add1;
}
}
String str_rouAfter = num_rou.toString();
String[] str_rouAfters = str_rouAfter.split(
"\\."
);
StringBuffer sb_rouAfter =
new
StringBuffer(str_rouAfters[0]);
sb_rouAfter.append(
"."
);
if
(str_rouAfters[1].length()<pre){
sb_rouAfter.append(str_rouAfters[1]);
for
(
int
i = 0;i<(pre - str_rouAfters[1].length());i++){
sb_rouAfter.append(
"0"
);
}
}
else
{
sb_rouAfter.append(str_rouAfters[1].substring(0,pre));
}
result = sb_rouAfter.toString();
}
}
else
if
(num1.contains(
"."
)&&(pre <= 0)){
String[] str = num1.split(
"\\."
);
char
str_odd_even = str[1].charAt(0);
StringBuffer sb =
new
StringBuffer(str[0]);
Integer num = Integer. parseInt(sb.toString());
if
(str_odd_even -
'5'
> 0){
num = num + 1;
}
else
if
(str_odd_even -
'5'
== 0){
String strlit = str[1].toString();
Double dblit = Double. parseDouble(
"0."
+strlit);
if
(dblit > 0.5){
num = num + 1;
}
else
if
(num%2==1){
num = num + 1;
}
}
result = num.toString();
}
else
{
StringBuffer sb =
new
StringBuffer(num1);
if
(pre > 0){
sb.append(
"."
);
}
for
(
int
i = 0; i < pre ;i++){
sb.append(
"0"
);
}
result = sb.toString();
}
return
result;
}
public
static
void
main(String[] args) {
String numRou = numRou(
"23.525"
,2);
System.
out
.println(numRou);
}
}