package arkref.ext.fig.basic;
import java.text.*;
/**
* Formatting class. I'm really lazy.
* D() is a family of default functions for formatting various types of objects.
*/
public class Fmt {
public static String D(double x) {
if(Math.abs(x - (int)x) < 1e-40) // An integer (probably)
return ""+(int)x;
if(Math.abs(x) < 1e-3) // Scientific notation (close to 0)
return String.format("%.2e", x);
return String.format("%.3f", x);
}
public static String D(boolean[] x) { return StrUtils.join(x); }
public static String D(int[] x) { return StrUtils.join(x); }
public static String D(double[] x) { return D(x, " "); }
public static String D(double[] xs, String delim) {
StringBuilder sb = new StringBuilder();
for(double x : xs) {
if(sb.length() > 0) sb.append(delim);
sb.append(Fmt.D(x));
}
return sb.toString();
}
// Print out only first N
public static String D(double[] x, int firstN) {
if(firstN >= x.length) return D(x);
return D(ListUtils.subArray(x, 0, firstN)) + " ...("+(x.length-firstN) + " more)";
}
public static String D(double[][] x) { return D(x, " "); }
public static String D(double[][] xs, String delim) {
StringBuilder sb = new StringBuilder();
for(double[] x : xs) {
if(sb.length() > 0) sb.append(delim);
sb.append(Fmt.D(x));
}
return sb.toString();
}
public static String D(TDoubleMap map) { return D(map, 20); }
public static String D(TDoubleMap map, int numTop) {
return MapUtils.topNToString(map, numTop);
}
public static String D(Object o) {
if(o instanceof double[]) return Fmt.D((double[])o);
if(o instanceof double[][]) return Fmt.D((double[][])o);
if(o instanceof double[][][]) return Fmt.D((double[][][])o);
throw Exceptions.unknownCase;
}
public static String bytesToString(long b) {
double gb = (double)b / (1024*1024*1024);
if(gb >= 1) return gb >= 10 ? (int)gb+"G" : NumUtils.round(gb, 1)+"G";
double mb = (double)b / (1024*1024);
if(mb >= 1) return mb >= 10 ? (int)mb+"M" : NumUtils.round(mb, 1)+"M";
double kb = (double)b / (1024);
if(kb >= 1) return kb >= 10 ? (int)kb+"K" : NumUtils.round(kb, 1)+"K";
return b+"";
}
public static String formatEasyDateTime(long t) {
return new SimpleDateFormat("MM/dd HH:mm").format(t);
}
}