1、实数的整数部分按照每三个数字用逗号分隔开(整数部分的高位有多余的0时,需先将多余的0过滤后,再进行数字分隔,如:0001234567 输出结果为1,234,567.00)
2、小数部分保留两位小数(四舍五入)
3、如果该数是负的,则在输出时需用括号将分隔后的数字括起来,例如:-10005.1645的输出结果为(10,005.16)
“`
package nyoj;
import java.util.Scanner;
/**
*
* @luxiaoyue
*
*/
public class NumberFenge {
public static void main(String[] args) {
String[] s = new String[100]; //建一个数组 用来存 要输入的数
Scanner scanner = new Scanner(System.in);
int i =0; // i代表数组位置
String str1 = scanner.next();//输入第一个数
while(true) {
if(str1.equals("efo")) { //判断 输入的是不是 efo ,如果是就跳出,
break;
}else { //如果不是就存到数组里
s[i] = str1;
i++;
str1 = scanner.next();
}
}
for(int j =0;j<100;j++) {
if(s[j]==null) {
break;
}else {
posFen(s[j]); //当数组 中第j 个数不为null时就把字符串 转化为数字
}
System.out.println();
}
}
public static void posFen(String str) {
if(str.contains(".")) {
String[] StrArray = str.split("\\."); //以 . 把数字的整数 和 小数部分分开,作为字符串 存入数组 strArrayz中
int result = Integer.parseInt(StrArray[0]);//把整数部分的字符串 转化为 整数
double d= Math.pow(10, StrArray[1].length());
double result1 = Integer.parseInt(StrArray[1])/d;// 把小数部分的字符串 转化为 小数(比如小数部分是123,只要把123除以1000得到0.123)
fenGe(result,result1); //把整数 和 小数 部分 传到 fenGe()函数中,按格式输出
}else {
int result = Integer.parseInt(str);
fenGe(result,0.0);
}
}
public static void fenGe(int a,double b) {
int[] c = new int[100]; //建一个数组用来存放 三位三位的 数字
int i =0;
boolean flag = true; //数字为 正时 为 真
if(a>=1000||a<=-1000) { //当数字大于1000或小于-1000时需要按 xxx,xxx这种格式输出
if(a<-1000) { //a是 负数时 flag 为 false ,把a 变成+a ,在输出时加()就可以了
a = -a;
flag = false;
}
while(a>1000) { //a%1000 如1234567%1000 = 567 存到 数组c,a = 1234,a%1000=234 存入数组
// a = 1234/100 = 1, 不需要再分割了 直接把最后一个 输出来
c[i] = a%1000;
a = a/1000;
i++;
}
if(flag) {
System.out.print(a+",");
}else {
System.out.print("("+a+",");
}
for(int j =i-1;j>0;j--) {
System.out.print(c[j]+","); //倒着输出
}
if(flag) {
System.out.printf("%.2f",(c[0]+b));
}else {
System.out.printf("%.2f)",(c[0]+b));
}
}else {
if(a>0) {
System.out.printf("%.2f",(a+0.0));
}else {
a = -a;
System.out.printf("(%.2f)",(a+0.0));
}
}
}
}