棒球比分多少结束:Java快速開發平臺

棒球比分大小怎么算 www.355548.live www.fastunit.com

  BlogJava :: 首頁 :: 聯系 :: 聚合  :: 管理
  23 Posts :: 0 Stories :: 273 Comments :: 0 Trackbacks

處理能力:

整數部分:9999999999999999(16位長,仟萬億)
小數部分:3位,多于3位舍去(不做四舍五入)

運行結果:
1.23 壹元貳角叁分
1234567890123456.123 壹仟貳佰叁拾肆萬伍仟陸佰柒拾捌億玖仟零壹拾貳萬叁仟肆佰伍拾陸元壹角貳分叁厘
0.0798 柒分玖厘
10,001,000.09 壹仟萬零壹仟元玖分
01.107700 壹元壹角柒厘

public class MoneyUtil {

  
/** 大寫數字 */
  
private static final String[] NUMBERS = { """""""""""""",
      
"""""" };
  
/** 整數部分的單位 */
  
private static final String[] IUNIT = { """""""""""""",
      
"""""""""""""""""" };
  
/** 小數部分的單位 */
  
private static final String[] DUNIT = { """""" };

  
/**
   * 得到大寫金額。
   
*/
  
public static String toChinese(String str) {
    str 
= str.replaceAll(",""");// 去掉","
    String integerStr;// 整數部分數字
    String decimalStr;// 小數部分數字

    
// 初始化:分離整數部分和小數部分
    if (str.indexOf("."> 0) {
      integerStr 
= str.substring(0, str.indexOf("."));
      decimalStr 
= str.substring(str.indexOf("."+ 1);
    } 
else if (str.indexOf("."== 0) {
      integerStr 
= "";
      decimalStr 
= str.substring(1);
    } 
else {
      integerStr 
= str;
      decimalStr 
= "";
    }
    
// integerStr去掉首0,不必去掉decimalStr的尾0(超出部分舍去)
    if (!integerStr.equals("")) {
      integerStr 
= Long.toString(Long.parseLong(integerStr));
      
if (integerStr.equals("0")) {
        integerStr 
= "";
      }
    }
    
// overflow超出處理能力,直接返回
    if (integerStr.length() > IUNIT.length) {
      System.out.println(str 
+ ":超出處理能力");
      
return str;
    }

    
int[] integers = toArray(integerStr);// 整數部分數字
    boolean isMust5 = isMust5(integerStr);// 設置萬單位
    int[] decimals = toArray(decimalStr);// 小數部分數字
    return getChineseInteger(integers, isMust5) + getChineseDecimal(decimals);
  }

  
/**
   * 整數部分和小數部分轉換為數組,從高位至低位
   
*/
  
private static int[] toArray(String number) {
    
int[] array = new int[number.length()];
    
for (int i = 0; i < number.length(); i++) {
      array[i] 
= Integer.parseInt(number.substring(i, i + 1));
    }
    
return array;
  }

  
/**
   * 得到中文金額的整數部分。
   
*/
  
private static String getChineseInteger(int[] integers, boolean isMust5) {
    StringBuffer chineseInteger 
= new StringBuffer("");
    
int length = integers.length;
    
for (int i = 0; i < length; i++) {
      
// 0出現在關鍵位置:1234(萬)5678(億)9012(萬)3456(元)
      
// 特殊情況:10(拾元、壹拾元、壹拾萬元、拾萬元)
      String key = "";
      
if (integers[i] == 0) {
        
if ((length - i) == 13)// 萬(億)(必填)
          key = IUNIT[4];
        
else if ((length - i) == 9)// 億(必填)
          key = IUNIT[8];
        
else if ((length - i) == 5 && isMust5)// 萬(不必填)
          key = IUNIT[4];
        
else if ((length - i) == 1)// 元(必填)
          key = IUNIT[0];
        
// 0遇非0時補零,不包含最后一位
        if ((length - i) > 1 && integers[i + 1!= 0)
          key 
+= NUMBERS[0];
      }
      chineseInteger.append(integers[i] 
== 0 ? key
          : (NUMBERS[integers[i]] 
+ IUNIT[length - i - 1]));
    }
    
return chineseInteger.toString();
  }

  
/**
   * 得到中文金額的小數部分。
   
*/
  
private static String getChineseDecimal(int[] decimals) {
    StringBuffer chineseDecimal 
= new StringBuffer("");
    
for (int i = 0; i < decimals.length; i++) {
      
// 舍去3位小數之后的
      if (i == 3)
        
break;
      chineseDecimal.append(decimals[i] 
== 0 ? ""
          : (NUMBERS[decimals[i]] 
+ DUNIT[i]));
    }
    
return chineseDecimal.toString();
  }

  
/**
   * 判斷第5位數字的單位"萬"是否應加。
   
*/
  
private static boolean isMust5(String integerStr) {
    
int length = integerStr.length();
    
if (length > 4) {
      String subInteger 
= "";
      
if (length > 8) {
        
// 取得從低位數,第5到第8位的字串
        subInteger = integerStr.substring(length - 8, length - 4);
      } 
else {
        subInteger 
= integerStr.substring(0, length - 4);
      }
      
return Integer.parseInt(subInteger) > 0;
    } 
else {
      
return false;
    }
  }

  
public static void main(String[] args) {
    String number 
= "1.23";
    System.out.println(number 
+ " " + MoneyUtil.toChinese(number));
    number 
= "1234567890123456.123";
    System.out.println(number 
+ " " + MoneyUtil.toChinese(number));
    number 
= "0.0798";
    System.out.println(number 
+ " " + MoneyUtil.toChinese(number));
    number 
= "10,001,000.09";
    System.out.println(number 
+ " " + MoneyUtil.toChinese(number));
    number 
= "01.107700";
    System.out.println(number 
+ " " + MoneyUtil.toChinese(number));
  }

}
posted on 2008-03-25 17:23 FastUnit 閱讀(24115) 評論(15)  編輯  收藏 所屬分類: Java

Feedback

# re: 金額數字轉中文大寫 2008-03-25 18:03 Find it, try it, experience it
First, it's really a hard job. Second, too many if/else, String.indexOf and String.subString make it hard to read, it would be good if you add enough unit test for it.  回復  更多評論
  

# re: 金額數字轉中文大寫[未登錄] 2008-04-22 11:14 阿錚
很好的東東,謝謝了

請問有沒有日期轉大寫的工具類  回復  更多評論
  

# re: 金額數字轉中文大寫 2008-04-23 10:48 taonlyt
超強  回復  更多評論
  

# re: 金額數字轉中文大寫 2008-04-23 10:57 taonlyt
謝謝,我借鑒了。  回復  更多評論
  

# re: 金額數字轉中文大寫 2008-10-14 20:36 235
謝謝~  回復  更多評論
  

# re: 金額數字轉中文大寫 2009-01-01 01:28 事實上
這個寫的太復雜了
  回復  更多評論
  

# re: 金額數字轉中文大寫[未登錄] 2009-01-08 17:39 stone
謝謝!  回復  更多評論
  

# re: 金額數字轉中文大寫 2009-03-05 17:07 張醫僧
恩 好!張醫僧用了說好~  回復  更多評論
  

# re: 金額數字轉中文大寫 2010-09-03 10:04 笨牛
10001000.09 壹仟萬零壹仟元玖分
這個有問題 應該為 壹仟萬零壹仟元零玖分
  回復  更多評論
  

# re: 金額數字轉中文大寫[未登錄] 2011-06-26 08:08 小李
147528903000  回復  更多評論
  

# re: 金額數字轉中文大寫[未登錄] 2011-06-26 08:09 小李
4155405302708.16大寫怎么寫?  回復  更多評論
  

# re: 金額數字轉中文大寫[未登錄] 2011-06-26 08:11 小李
1167248680536大寫怎么寫?  回復  更多評論
  

# 13340.60[未登錄] 2013-03-18 07:48 1
13340.60  回復  更多評論
  

# re: 金額數字轉中文大寫 2013-08-23 16:45 阿里媽媽
566400  回復  更多評論
  

# re: 金額數字轉中文大寫[未登錄] 2013-11-20 23:59 titan
/*
* 需求:自動轉換人民幣大寫金額的程序
*
* 思路:
* 獲取一個double my
* 格式化double,格式:##0.00,轉換成去掉小數點的字符串formatDouble
* 定義大寫數字數組的String[] money和單位數組String[] unit
* 判斷字符串formatDouble的長度,通過角標獲取每個字符,遍歷字符串,用角標獲取單位,用值獲取大寫數字,將獲取每次循環獲得的結果存入一個字符串緩沖區
* 此時有兩種情況出現:
* 1、循環本次值也為0,就沒有必要存入;
* 2、上次值為0,本次值不為0,就需要在本次前面加一個字符串“零”。
* 解決辦法:定義變量moneybj,用于存入本次值,加以判斷確定存入什么值。
* 當值為0時,無法解決金額達到萬或億或萬億時,單位不能存入緩沖區,
* 解決辦法:定義一個變量unitbj,用于判斷
* 1、當0值“萬”存入后,鎖死標記,直到有非0值存入時才打開
* 2、億在整個存入過程中只可能出現一次,所以不用判斷,只要有“億”,直接存入并鎖死標記。
* 3、
*
* 注意:
* 本方法最大到千億;
* 調用方法前,注意判斷金額值為0和負數。為零直接打印輸出零,為負數乘以-1后調用方法,在結果前面加”負“。
*/

package test;

import java.text.DecimalFormat;

class Test
{
public static void main(String[] args)
{
double my = 10001000.9;

if (formatdouble(my).equals("000") || (formatdouble(my).equals("-000")) )
sop("人民幣零元整");
else
{
if (my<-0.0)
sop("人民幣負"+strStandard(strUppercase(my*-1.0)));
else
sop("人民幣"+strStandard(strUppercase(my)));
}
}
//按人民幣大寫的格式格式化
private static String strStandard(String s)
{
if (s.indexOf("分")==-1)
s= s+"整" ;
return s;

}
//定義大寫數組和單位數組,并遍歷格式化后的字符串,退回一個字符串
private static String strUppercase(double my)
{
//定義大寫unit
String[] unit = {"仟","佰","拾","萬","仟","佰","拾","億","仟","佰","拾","萬","仟","佰","拾","元","角","分"};
//定義大寫單位money
String[] money = {"零","壹","貳","叁","肆","伍","陸","柒","捌","玖"};
//定義緩沖區
StringBuilder strBuilder = new StringBuilder();
//格式化
String strFormat = formatdouble(my);
//遍歷
int strlength=strFormat.length();
int moneybj = 1;//用于標記上次money值是否為零
int unitbj=1;//用于標記在money值等于0的情況下“萬”是否存入過
for(int i=0;i<strlength ; i++)
{
int value = Integer.parseInt(String.valueOf(strFormat.charAt(i)));

if (moneybj!=0 & value!=0 )//情況一:上次和本次值不為0,直接存入
{
strBuilder.append(money[value]).append(unit[unit.length-strlength+i]);
moneybj=value;
unitbj=1;
}
if(moneybj==0 & value!=0)//情況二:上次值為0,本次值不為0,加“零“存入
{
strBuilder.append("零").append(money[value]).append(unit[unit.length-strlength+i]);
moneybj=value;
unitbj=1;
}
if(moneybj==0 & value==0)//情況三:上次和本次值為0,不存入
{
if (unitbj==1 && unit[unit.length-strlength+i].equals("萬") )
{
strBuilder.append("萬");
unitbj=0;
}
if (unit[unit.length-strlength+i].equals("元") )//解決如果元位上是0的問題
{
strBuilder.append("元");
}
if (unit[unit.length-strlength+i].equals("億") )
{
strBuilder.append("億");
unitbj=0;
}

moneybj=value;
}
if(moneybj!=0 & value==0)//情況三:上次值不為0,本次值為0,不存入
{
if (unitbj==1 && unit[unit.length-strlength+i].equals("萬") )
{
strBuilder.append("萬");
unitbj=0;
}
if (unit[unit.length-strlength+i].equals("元") )//解決如果元位上是0的問題
{
strBuilder.append("元");
}
if (unit[unit.length-strlength+i].equals("億") )
{
strBuilder.append("億");
unitbj=0;
}
moneybj=value;
}
}
//在這種情況下前面會有“零”或 ”元“的存入,如 0.1 ,此時需要去掉“零”
if (strBuilder.indexOf("零")==0)
strBuilder.replace(0, 1, "");
if (strBuilder.indexOf("元")==0)
strBuilder.replace(0, 1, "");

return strBuilder.toString();

}

//格式化字符串并退回一個字符串;
private static String formatdouble(double my)
{
DecimalFormat format = new DecimalFormat("##0.00");
//刪除小數點
String str = format.format(my);
return str.replace(".","");
}
//打印輸出
private static void sop(Object obj)
{
System.out.println(obj);
}
}
  回復  更多評論
  

{ganrao} 江西快三投注平台 最靠谱的投资理财平台 必赢客手机版 今天湖北十一选五 股票投资计划书 河北十一选五基本走势图一 一分快三技巧顺口溜 上海11选5什么时候开 买作弊器被骗全过程 吉林十一选五走势图表 股票涨跌怎么算出 山东11选5任三技巧 股票配资平台出不了金怎么办 甘肃十一造五一定牛 哪个网站可以买宁夏十一选五 广西双彩最新开奖结果