A. java裡面如何格式化數字
java提供了格式化double類型的方法:NumberFormat.getInstance().format(a);這個是java內置的函數可以直接格式化double類型的數字;NumberFormat要導入import java.text.NumberFormat;即可。
B. java 用字元串實現加減法 包括兩位小數 金額格式化 可以為正負 跪求!!!!!!
只寫一個加法的部分的核心代碼,其他類似:
public String calculateAdd( String a,String b)throws Exception{
double a=Double.parseDouble(a);
double b=Double.parseDouble(b);
double result=a+b;
NumberFormat nf2 =
NumberFormat.getInstance(Locale.GERMAN); // 得到德國的格式 ,這里可以設置不
//同國家的格式,無參默認本地
String resultStr=nf2.format(result);
System.out.println(resultStr);
return resultStr;
}
注意:1.傳入的參數是數字組成的字元串,不然會出錯
2.寫代碼時注意引包
C. java實現數值千分位格式化且保留指定小數位且小數位不進行四捨五入
保留指定位數能進行四捨五入
public static void main(String[] args) {
String str ="12312323423423.123283123";
BigDecimal b = new BigDecimal(str);
//,代表分隔符
//0.後面的##代表位數 如果換成0 效果就是位數不足0補齊
DecimalFormat d1 =new DecimalFormat("#,##0.####;(#)");
System.out.println(d1.format(b));
}
不四捨五入的方法
String str ="12312323423423.123283923";
BigDecimal b = new BigDecimal(str);
//,代表分隔符
//.後面的##代表位數 如果換成0 效果就是位數不足0補齊
DecimalFormat d1 =new DecimalFormat("#,##0.######");
// 設置舍入模式
d1.setRoundingMode(RoundingMode.FLOOR);
System.out.println(d1.format(b));
D. java bigdecimal類型金額格式化,保留4為小數
金額3位一個逗號需要使用NumberFormat進行數值的格式化。
E. java簡單題:一組金額數據,用人民幣大寫顯示出來
/**
*程序目的:
*從命令行接收一個數,並將其轉化為中文金額的大寫方式
*例如123.45-->壹佰貳拾叄元肆角伍分
*@authorgdb
*
*實在是不符合規范,程序裡面的演算法沒有讓人明白得很清楚的注釋,讀上去覺得有
*點難度,可讀性不強。而且很多程序還存在不少bug,隨便一測就測出來了。
*所以本人還是決定重新寫一下這個程序,並且盡量做到消除不必要的bug。這個程
*序我沒有用什麼很精妙的演算法,不過用了一些Java類庫中的類,像是正則表達式之類
*
*/
publicclassTrans2RMB{
/**
*測試程序的可行性
*@paramargs
*/
publicstaticvoidmain(String[]args){
System.out.println(" --------將數字轉換成中文金額的大寫形式------------ ");
Trans2RMBt2r=newTrans2RMB();
Strings=t2r.cleanZero(t2r.splitNum(t2r.roundString(t2r.getNum())));
//如果轉換過後是一個空串,則不輸出屏幕
if(!"".equals(s)){
System.out.println("轉換成中文後為:"+s);;
}
System.out.println(" ---------------------------------------------");
}
/**
*從命令行接收一個數,在其中調用checkNum()方法對其進行
*驗證,並返回相應的值
*@return如果輸入合法,返回輸入的這個數
*/
privateStringgetNum(){
Strings=null;
System.out.println("請輸入一個數字(精確到小數點後兩位):");
//從命令行輸入這個浮點數
java.util.Scannerscanner=newjava.util.Scanner(System.in);
s=scanner.next();
//關閉這個Scanner
scanner.close();
//判斷用戶輸入是否合法
//若合法,返回這個值;若非法返回"0"
if(this.checkNum(s)){
returns;
}else{
return"";
}
}
/**
*判斷用戶輸入的數據是否合法,用戶只能輸入大於零的數字,不能輸入其它字元
*@paramsString
*@return如果用戶輸入數據合法,返回true,否則返回false
*/
privatebooleancheckNum(Strings){
//如果用戶輸入的數里有非數字字元,則視為非法數據,返回false
try{
floatf=Float.valueOf(s);
//如果這個數小於零則視為非法數據,返回false
if(f<0){
System.out.println("非法數據,請檢查!");
returnfalse;
}else{
returntrue;
}
}catch(NumberFormatExceptione){
System.out.println("非法數據,請檢查!");
returnfalse;
}
}
/**
*把用戶輸入的數以小數點為界分割開來,並調用numFormat()方法
*進行相應的中文金額大寫形式的轉換
*註:傳入的這個數應該是經過roundString()方法進行了四捨五入操作的
*@paramsString
*@return轉換好的中文金額大寫形式的字元串
*/
privateStringsplitNum(Strings){
//如果傳入的是空串則繼續返回空串
if("".equals(s)){
return"";
}
//以小數點為界分割這個字元串
intindex=s.indexOf(".");
//截取並轉換這個數的整數部分
StringintOnly=s.substring(0,index);
Stringpart1=this.numFormat(1,intOnly);
//截取並轉換這個數的小數部分
StringsmallOnly=s.substring(index+1);
Stringpart2=this.numFormat(2,smallOnly);
//把轉換好了的整數部分和小數部分重新拼湊一個新的字元串
StringnewS=part1+part2;
returnnewS;
}
/**
*對傳入的數進行四捨五入操作
*@paramsString從命令行輸入的那個數
*@return四捨五入後的新值
*/
privateStringroundString(Strings){
//如果傳入的是空串則繼續返回空串
if("".equals(s)){
return"";
}
//將這個數轉換成double類型,並對其進行四捨五入操作
doubled=Double.parseDouble(s);
//此操作作用在小數點後兩位上
d=(d*100+0.5)/100;
//將d進行格式化
s=newjava.text.DecimalFormat("##0.000").format(d);
//以小數點為界分割這個字元串
intindex=s.indexOf(".");
//這個數的整數部分
StringintOnly=s.substring(0,index);
//規定數值的最大長度只能到萬億單位,否則返回"0"
if(intOnly.length()>13){
System.out.println("輸入數據過大!(整數部分最多13位!)");
return"";
}
//這個數的小數部分
StringsmallOnly=s.substring(index+1);
//如果小數部分大於兩位,只截取小數點後兩位
if(smallOnly.length()>2){
StringroundSmall=smallOnly.substring(0,2);
//把整數部分和新截取的小數部分重新拼湊這個字元串
s=intOnly+"."+roundSmall;
}
returns;
}
/**
*把傳入的數轉換為中文金額大寫形式
*@paramflagint標志位,1表示轉換整數部分,0表示轉換小數部分
*@paramsString要轉換的字元串
*@return轉換好的帶單位的中文金額大寫形式
*/
privateStringnumFormat(intflag,Strings){
intsLength=s.length();
//貨幣大寫形式
StringbigLetter[]={"零","壹","貳","叄","肆","伍","陸","柒","捌","玖"};
//貨幣單位
Stringunit[]={"元","拾","佰","仟","萬",
//拾萬位到仟萬位
"拾","佰","仟",
//億位到萬億位
"億","拾","佰","仟","萬"};
Stringsmall[]={"分","角"};
//用來存放轉換後的新字元串
StringnewS="";
//逐位替換為中文大寫形式
for(inti=0;i<sLength;i++){
if(flag==1){
//轉換整數部分為中文大寫形式(帶單位)
newS=newS+bigLetter[s.charAt(i)-48]+unit[sLength-i-1];
}elseif(flag==2){
//轉換小數部分(帶單位)
newS=newS+bigLetter[s.charAt(i)-48]+small[sLength-i-1];
}
}
returnnewS;
}
/**
*把已經轉換好的中文金額大寫形式加以改進,清理這個字
*符串裡面多餘的零,讓這個字元串變得更加可觀
*註:傳入的這個數應該是經過splitNum()方法進行處理,這個字
*符串應該已經是用中文金額大寫形式表示的
*@paramsString已經轉換好的字元串
*@return改進後的字元串
*/
privateStringcleanZero(Strings){
//如果傳入的是空串則繼續返回空串
if("".equals(s)){
return"";
}
//如果用戶開始輸入了很多0去掉字元串前面多餘的'零',使其看上去更符合習慣
while(s.charAt(0)=='零'){
//將字元串中的"零"和它對應的單位去掉
s=s.substring(2);
//如果用戶當初輸入的時候只輸入了0,則只返回一個"零"
if(s.length()==0){
return"零";
}
}
//字元串中存在多個'零'在一起的時候只讀出一個'零',並省略多餘的單位
/*由於本人對演算法的研究太菜了,只能用4個正則表達式去轉換了,各位大蝦別介意哈...*/
Stringregex1[]={"零仟","零佰","零拾"};
Stringregex2[]={"零億","零萬","零元"};
Stringregex3[]={"億","萬","元"};
Stringregex4[]={"零角","零分"};
//第一輪轉換把"零仟",零佰","零拾"等字元串替換成一個"零"
for(inti=0;i<3;i++){
s=s.replaceAll(regex1[i],"零");
}
//第二輪轉換考慮"零億","零萬","零元"等情況
//"億","萬","元"這些單位有些情況是不能省的,需要保留下來
for(inti=0;i<3;i++){
//當第一輪轉換過後有可能有很多個零疊在一起
//要把很多個重復的零變成一個零
s=s.replaceAll("零零零","零");
s=s.replaceAll("零零","零");
s=s.replaceAll(regex2[i],regex3[i]);
}
//第三輪轉換把"零角","零分"字元串省略
for(inti=0;i<2;i++){
s=s.replaceAll(regex4[i],"");
}
//當"萬"到"億"之間全部是"零"的時候,忽略"億萬"單位,只保留一個"億"
s=s.replaceAll("億萬","億");
returns;
}
}
F. java數字格式化
用 %3.2f格式化後, 替換逗號即可;
同理, 用 #,##0.00 格式化後, 替換, 為空格即可.
你的需求:
doublex=1234.5;
DecimalFormatdf=newDecimalFormat("#,###.0");
Stringxs=df.format(x);
xs=xs.replace(",","").replace(".",",");
System.out.println(xs);
輸出
1234,5