📄 mathutil.java
字号:
package com.sure.util;
public class MathUtil {
public static void main(String[] args) {
System.out.println(round(12.41d,2));
System.out.println(round(12.55d,2));
System.out.println(round(0.123,0));
System.out.println(round(12.5d,0));
System.out.println(round(-12.4d,0));
System.out.println(round(-12.5d,0));
}
/*
* 四舍五入法,截位函数
* input:s="1153.2512" p = -2;output:1200
* input:s="1111.2552" p = 2;output:1111.26
*/
public static double round(double d, int p) {
return Double.parseDouble(round(String.valueOf(d), p));
}
private static String round(String s, int p) {
char sign = '+';
ParseInfo pi = parseExponentialNumber(s);
if (s.charAt(0) == '-') {
pi.integralPart = pi.integralPart.substring(1);
sign = '-';
pi.radixPointPos--;
}
if (pi.integralPart.charAt(0) != '0') {
pi.integralPart = "0" + pi.integralPart;
pi.radixPointPos++;
}
String spoj;
spoj = pi.integralPart + pi.decimalPart;
if (p >= pi.decimalPart.length())
return s;
if (p + pi.radixPointPos < 1)
return "0";
pi.integralPart = spoj.substring(0, pi.radixPointPos + p);
pi.decimalPart = spoj.substring(pi.radixPointPos + p);
char z = pi.decimalPart.charAt(0);
if (z > '4') {
int length = pi.integralPart.length();
long b = Long.parseLong(pi.integralPart);
b = b + 1;
pi.integralPart =
rightAppendChar("0", '0', length - String.valueOf(b).length())
+ String.valueOf(b);
if (String.valueOf(pi.integralPart).length() > length)
pi.radixPointPos++;
}
if (pi.integralPart.length() < pi.radixPointPos)
pi.integralPart =
rightAppendChar(pi.integralPart, '0', pi.radixPointPos);
s =
pi.integralPart.substring(0, pi.radixPointPos)
+ "."
+ pi.integralPart.substring(pi.radixPointPos)
+ "E"
+ pi.exponentialPart;
return sign + s;
}
private static ParseInfo parseExponentialNumber(String s) {
int exponentialPos;
ParseInfo pi = new ParseInfo();
exponentialPos = s.indexOf("E");
if (exponentialPos != -1) {
pi.exponentialPart = s.substring(exponentialPos + 1);
s = s.substring(0, exponentialPos);
}
pi.radixPointPos = s.indexOf(".");
if (pi.radixPointPos != -1) {
pi.decimalPart = s.substring(pi.radixPointPos + 1);
pi.integralPart = s.substring(0, pi.radixPointPos);
}
else {
pi.integralPart = s;
pi.radixPointPos = pi.integralPart.length();
}
return pi;
}
private static String rightAppendChar(String s, char c, int length) {
int n = length - s.length();
for (int i = 0; i < n; i++)
s = s + c;
return s;
}
}
class ParseInfo {
String integralPart = "";
String decimalPart = "";
String exponentialPart = "0";
int radixPointPos;
ParseInfo() {
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -