PercentNumber.java
package com.github.mygreen.cellformatter.number;
import java.math.RoundingMode;
import java.text.DecimalFormat;
/**
* 百分率の数値を表現するクラス。
*
* @author T.TSUCHIE
*
*/
public class PercentNumber extends DecimalNumber {
public PercentNumber(final double value, final int decimalScale, final int permilles) {
super(value, decimalScale, permilles);
}
public PercentNumber(final double value, final int decimalScale) {
this(value, decimalScale, 0);
}
@Override
protected void init() {
if(isZero()) {
this.integerPart = "";
this.decimalPart = "";
return;
}
final StringBuilder sb = new StringBuilder();
sb.append("#");
if(getScale() > 0) {
sb.append(".");
}
// 小数の精度分、書式を追加する。
for(int i=0; i < getScale(); i++) {
sb.append("#");
}
// パーセントの追加
sb.append("%");
final DecimalFormat format = new DecimalFormat(sb.toString());
format.setRoundingMode(RoundingMode.HALF_UP);
double num = Math.abs(getValue());
if(getPermilles() > 0) {
num /= Math.pow(1000, getPermilles());
}
String str = format.format(num);
// パーセントの除去
str = str.substring(0, str.length()-1);
// 数値を小数部と整数部に分割する。
setupIntegerAndDecimalPart(str);
}
@Override
public String toString() {
return super.toString() + "%";
}
}