[Demonstration 1]

[Buggy Method]
private void parseEpisode(Comic comic, Element spanItem) {
    try {
        ComicEpisode episodeFromNet = new ComicEpisode();
        Element a = spanItem.select("a").first();
        String title = a.text();
        String episodeNo = StringUtil.pickInteger(title.split(" ")[0]);
        episodeNo = StringUtils.isBlank(episodeNo) ? "1" : episodeNo;
        String readPageUrl = a.attr("href");
        episodeFromNet.setComicId(comic.getId());
        episodeFromNet.setTitle(title);
        episodeFromNet.setEpisodeNo(Integer.parseInt(episodeNo));
        episodeFromNet.setReadPageUrl(readPageUrl);
        ComicEpisode episodeFromDb = comicEpisodeDao.findByComicIdEpisodeNo(episodeFromNet.getComicId(), episodeFromNet.getEpisodeNo());
        if (episodeFromDb == null) {
            comicEpisodeDao.save(episodeFromNet);
            if (logger.isDebugEnabled()) {
                logger.debug("{}add comic episode : {}", COMIC_TENCENT_EPISODE, JacksonUtil.encode(episodeFromNet));
            }
            return;
        }
        boolean isSame = BeanUtil.isFieldsValueSame(episodeFromNet, episodeFromDb, episodeCompareFieldNames, null);
        if (!isSame) {
            // 主键id
            episodeFromNet.setId(episodeFromDb.getId());
            // 不同则更新
            comicEpisodeDao.udpate(episodeFromNet);
            logger.info("{}update comic episode : \r\n OLD : {}\r\n NEW : {}", new Object[] { COMIC_TENCENT_EPISODE, JacksonUtil.encode(episodeFromDb), JacksonUtil.encode(episodeFromNet) });
        }
    } catch (Exception e) {
        logger.error(COMIC_TENCENT_EPISODE + "parseEpisode fail. comic : " + JacksonUtil.encodeQuietly(comic), e);
    }
}

[Buggy Hunk]
episodeFromNet.setReadPageUrl(readPageUrl);

[Patch]
episodeFromNet.setReadPageUrl(AppHelper.addRootUrlIfNeeded(readPageUrl, comic.getRootUrl()));

[Demonstration 2]

[Buggy Method]
@Override
public BigDecimal convertir(BigDecimal valueToConvert, Converter to) {
    BigDecimal result;
    if (celciusToFarenheit) {
        result = valueToConvert.multiply(new BigDecimal("1.8")).add(new BigDecimal("32"));
    } else {
        result = valueToConvert.min(new BigDecimal("32")).multiply(new BigDecimal("0.5555555556"));
    }
    result.setScale(2, RoundingMode.HALF_UP);
    // on renvoit le resultat arrondit a 2 decimales
    return result;
}

[Buggy Hunk]
result = valueToConvert.min(new BigDecimal("32")).multiply(new BigDecimal("0.5555555556"));

[Patch]
result = valueToConvert.subtract(new BigDecimal("32")).multiply(new BigDecimal("5")).divide(new BigDecimal("9"), 2, RoundingMode.HALF_UP);

[Demonstration 3]

[Buggy Method]
public void onClick(View v) {
    Button btn = (Button) v;
    switch(v.getId()) {
        case R.id.buttonDot:
            if (editText.getText().length() == 0 || editText.getText().equals("-")) {
                Toast toast = Toast.makeText(getApplicationContext(), "Сначала целая часть!", Toast.LENGTH_SHORT);
                toast.show();
                act = Ariffmetics.STARTPOINT;
                editText.setText(null);
            } else {
                editText.append(".");
            }
            break;
        case R.id.buttonPlus:
            act = Ariffmetics.MADDITION;
            editText.setText(null);
            break;
        case R.id.buttonMinus:
            if (editText.getText().length() == 0) {
                editText.setText("-");
                act = Ariffmetics.STARTPOINT;
            } else {
                editText.setText(null);
                act = Ariffmetics.MSUBSTRACT;
            }
            break;
        case R.id.buttonMult:
            editText.setText(null);
            act = Ariffmetics.MMULTIPLICATION;
            break;
        case R.id.buttonDel:
            editText.setText(null);
            act = Ariffmetics.MDIVISION;
            break;
        default:
            if (act == Ariffmetics.STARTPOINT) {
                editText.setText(editText.getText() + btn.getText().toString());
                ValueOne = Float.parseFloat(editText.getText() + "");
            } else {
                editText.setText(editText.getText() + btn.getText().toString());
                ValueTwo = Float.parseFloat(editText.getText() + "");
            }
            break;
        case R.id.buttonClear:
            ValueOne = NaN;
            ValueTwo = NaN;
            act = Ariffmetics.STARTPOINT;
            editText.setText("");
            break;
        case R.id.buttonEngCalc:
            Intent intent = new Intent(this, EngCalc.class);
            startActivity(intent);
            break;
        case R.id.buttonEq:
            if ((editText.getText().length() == 0)) {
                Toast toast2 = Toast.makeText(getApplicationContext(), "Неправильная последовательность примера", Toast.LENGTH_SHORT);
                toast2.show();
                act = Ariffmetics.STARTPOINT;
                editText.setText(null);
            }
            switch(act) {
                case MADDITION:
                    BigDecimal val1add = BigDecimal.valueOf(ValueOne);
                    BigDecimal val2add = BigDecimal.valueOf(ValueTwo);
                    chek = val1add.add(val2add).toString();
                    if (chek.substring(chek.length() - 1).equals("0")) {
                        editText.setText(val1add.add(val2add).setScale(0, BigDecimal.ROUND_HALF_DOWN) + "");
                    } else {
                        editText.setText(val1add.add(val2add) + "");
                    }
                    ValueOne = Float.parseFloat(editText.getText() + "");
                    act = Ariffmetics.STARTPOINT;
                    break;
                case MDIVISION:
                    BigDecimal val1div = BigDecimal.valueOf(ValueOne);
                    BigDecimal val2div = BigDecimal.valueOf(ValueTwo);
                    if (ValueTwo == 0) {
                        Toast toast7 = Toast.makeText(getApplicationContext(), "На ноль делить нельзя", Toast.LENGTH_SHORT);
                        toast7.show();
                        act = Ariffmetics.STARTPOINT;
                    } else {
                        chek = val1div.divide(val2div, 10, BigDecimal.ROUND_HALF_DOWN).toString();
                        if (chek.substring(chek.length() - 1).equals("0")) {
                            editText.setText(val1div.divide(val2div).setScale(1, BigDecimal.ROUND_HALF_DOWN) + "");
                        } else {
                            editText.setText(val1div.divide(val2div, 10, BigDecimal.ROUND_HALF_DOWN) + "");
                        }
                        ValueOne = Float.parseFloat(editText.getText() + "");
                        act = Ariffmetics.STARTPOINT;
                        break;
                    }
                case MSUBSTRACT:
                    BigDecimal val1minus = new BigDecimal(ValueOne, mc);
                    BigDecimal val2minus = new BigDecimal(ValueTwo, mc);
                    chek = val1minus.subtract(val2minus).toString();
                    if (chek.substring(chek.length() - 1).equals("0")) {
                        editText.setText(val1minus.subtract(val2minus).setScale(0, BigDecimal.ROUND_HALF_DOWN) + "");
                    } else {
                        editText.setText(val1minus.subtract(val2minus) + "");
                    }
                    ValueOne = Float.parseFloat(editText.getText().toString());
                    act = Ariffmetics.STARTPOINT;
                    break;
                case MMULTIPLICATION:
                    BigDecimal val1 = BigDecimal.valueOf(ValueOne);
                    BigDecimal val2 = BigDecimal.valueOf(ValueTwo);
                    chek = val1.multiply(val2).toString();
                    if (chek.substring(chek.length() - 1).equals("0")) {
                        editText.setText(val1.multiply(val2).setScale(0, BigDecimal.ROUND_HALF_DOWN) + "");
                    } else {
                        editText.setText(val1.multiply(val2) + "");
                    }
                    ValueOne = Float.parseFloat(editText.getText() + "");
                    act = Ariffmetics.STARTPOINT;
                    break;
            }
    }
}

[Buggy Hunk]
editText.setText(val1div.divide(val2div).setScale(1, BigDecimal.ROUND_HALF_DOWN) + "");

[Patch]
editText.setText(val1div.divide(val2div).setScale(0, BigDecimal.ROUND_HALF_DOWN) + "");