Program: 28324
Project: 28324
Buggy source:
/** 
 * 阿拉伯数字转换成中文,小数点后四舍五入保留两位. 使用于整数、小数的转换.
 * @param amount 数字
 * @return 中文
 */
public static String format(double amount,boolean isUserTraditional){
  final String[] numArray=isUserTraditional ? traditionalDigits : simpleDigits;
  if (amount > 99999999999999.99 || amount < -99999999999999.99) {
    throw new IllegalArgumentException("String_Node_Str");
  }
  boolean negative=false;
  if (amount < 0) {
    negative=true;
    amount=amount * (-1);
  }
  long temp=Math.round(amount * 100);
  int numFen=(int)(temp % 10);
  temp=temp / 10;
  int numJiao=(int)(temp % 10);
  temp=temp / 10;
  int[] parts=new int[20];
  int numParts=0;
  for (int i=0; ; i++) {
    if (temp == 0)     break;
    int part=(int)(temp % 10000);
    parts[i]=part;
    numParts++;
    temp=temp / 10000;
  }
  boolean beforeWanIsZero=true;
  String chineseStr="String_Node_Str";
  for (int i=0; i < numParts; i++) {
    String partChinese=toChinese(parts[i],numArray);
    if (i % 2 == 0) {
      if ("String_Node_Str".equals(partChinese))       beforeWanIsZero=true;
 else       beforeWanIsZero=false;
    }
    if (i != 0) {
      if (i % 2 == 0)       chineseStr="String_Node_Str" + chineseStr;
 else {
        if ("String_Node_Str".equals(partChinese) && !beforeWanIsZero)         chineseStr="String_Node_Str" + chineseStr;
 else {
          if (parts[i - 1] < 1000 && parts[i - 1] > 0)           chineseStr="String_Node_Str" + chineseStr;
          chineseStr="String_Node_Str" + chineseStr;
        }
      }
    }
    chineseStr=partChinese + chineseStr;
  }
  if ("String_Node_Str".equals(chineseStr))   chineseStr=numArray[0];
 else   if (negative)   chineseStr="String_Node_Str" + chineseStr;
  chineseStr=chineseStr + "String_Node_Str";
  if (numFen == 0 && numJiao == 0) {
    chineseStr=chineseStr + "String_Node_Str";
  }
 else   if (numFen == 0) {
    chineseStr=chineseStr + "String_Node_Str" + numArray[numJiao]+ "String_Node_Str";
  }
 else {
    if (numJiao == 0)     chineseStr=chineseStr + "String_Node_Str" + numArray[numFen]+ "String_Node_Str";
 else     chineseStr=chineseStr + "String_Node_Str" + numArray[numJiao]+ numArray[numFen]+ "String_Node_Str";
  }
  return chineseStr;
}

Fixed version (ground truth):
/** 
 * 阿拉伯数字转换成中文,小数点后四舍五入保留两位. 使用于整数、小数的转换.
 * @param amount 数字
 * @param isUseTraditional 是否使用繁体
 * @param isMoneyMode 是否为金额模式
 * @return 中文
 */
public static String format(double amount,boolean isUseTraditional,boolean isMoneyMode){
  final String[] numArray=isUseTraditional ? traditionalDigits : simpleDigits;
  if (amount > 99999999999999.99 || amount < -99999999999999.99) {
    throw new IllegalArgumentException("String_Node_Str");
  }
  boolean negative=false;
  if (amount < 0) {
    negative=true;
    amount=-amount;
  }
  long temp=Math.round(amount * 100);
  int numFen=(int)(temp % 10);
  temp=temp / 10;
  int numJiao=(int)(temp % 10);
  temp=temp / 10;
  int[] parts=new int[20];
  int numParts=0;
  for (int i=0; temp != 0; i++) {
    int part=(int)(temp % 10000);
    parts[i]=part;
    numParts++;
    temp=temp / 10000;
  }
  boolean beforeWanIsZero=true;
  String chineseStr="String_Node_Str";
  for (int i=0; i < numParts; i++) {
    String partChinese=toChinese(parts[i],isUseTraditional);
    if (i % 2 == 0) {
      beforeWanIsZero=StrUtil.isEmpty(partChinese);
    }
    if (i != 0) {
      if (i % 2 == 0) {
        chineseStr="String_Node_Str" + chineseStr;
      }
 else {
        if ("String_Node_Str".equals(partChinese) && false == beforeWanIsZero) {
          chineseStr="String_Node_Str" + chineseStr;
        }
 else {
          if (parts[i - 1] < 1000 && parts[i - 1] > 0) {
            chineseStr="String_Node_Str" + chineseStr;
          }
          chineseStr="String_Node_Str" + chineseStr;
        }
      }
    }
    chineseStr=partChinese + chineseStr;
  }
  if ("String_Node_Str".equals(chineseStr))   chineseStr=numArray[0];
 else   if (negative) {
    chineseStr="String_Node_Str" + chineseStr;
  }
  if (numFen != 0 || numJiao != 0) {
    if (numFen == 0) {
      chineseStr+=(isMoneyMode ? "String_Node_Str" : "String_Node_Str") + numArray[numJiao] + (isMoneyMode ? "String_Node_Str" : "String_Node_Str");
    }
 else {
      if (numJiao == 0) {
        chineseStr+=(isMoneyMode ? "String_Node_Str" : "String_Node_Str") + numArray[numFen] + (isMoneyMode ? "String_Node_Str" : "String_Node_Str");
      }
 else {
        chineseStr+=(isMoneyMode ? "String_Node_Str" : "String_Node_Str") + numArray[numJiao] + (isMoneyMode ? "String_Node_Str" : "String_Node_Str")+ numArray[numFen]+ (isMoneyMode ? "String_Node_Str" : "String_Node_Str");
      }
    }
  }
 else   if (isMoneyMode) {
    chineseStr+="String_Node_Str";
  }
  return chineseStr;
}