📄 displayformatters.java
字号:
((n % (1000L * 1000L * 1000L)) / (1000L * 1000L * 100L))+
units_base10[UNIT_GB];
}else if (n < 1000L * 1000L * 1000L * 1000L* 1000L){
return (n / (1000L * 1000L * 1000L* 1000L)) + "." +
((n % (1000L * 1000L * 1000L* 1000L)) / (1000L * 1000L * 1000L* 100L))+
units_base10[UNIT_TB];
}else{
return Formats_units_alot;
}
}
public static String
formatByteCountToBase10KBEtcPerSec(
long n )
{
return( formatByteCountToBase10KBEtc(n) + per_sec );
}
public static String
formatETA(long eta)
{
if (eta == 0) return PeerManager_status_finished;
if (eta == -1) return "";
if (eta > 0) return TimeFormatter.format(eta);
return PeerManager_status_finishedin + " " + TimeFormatter.format(eta * -1);
}
public static String
formatDownloaded(
DownloadManagerStats stats )
{
long total_discarded = stats.getDiscarded();
long total_received = stats.getTotalGoodDataBytesReceived();
if(total_discarded == 0){
return formatByteCountToKiBEtc(total_received);
}else{
return formatByteCountToKiBEtc(total_received) + " ( " +
DisplayFormatters.formatByteCountToKiBEtc(total_discarded) + " " +
discarded + " )";
}
}
public static String
formatHashFails(
DownloadManager download_manager )
{
TOTorrent torrent = download_manager.getTorrent();
if ( torrent != null ){
long bad = download_manager.getStats().getHashFailBytes();
// size can exceed int so ensure longs used in multiplication
long count = bad / (long)torrent.getPieceLength();
String result = count + " ( " + formatByteCountToKiBEtc(bad) + " )";
return result;
}
return "";
}
public static String
formatDownloadStatus(
DownloadManager manager )
{
int state = manager.getState();
String tmp = "";
switch (state) {
case DownloadManager.STATE_WAITING :
tmp = ManagerItem_waiting;
break;
case DownloadManager.STATE_INITIALIZING :
tmp = ManagerItem_initializing;
break;
case DownloadManager.STATE_INITIALIZED :
tmp = ManagerItem_initializing;
break;
case DownloadManager.STATE_ALLOCATING :
tmp = ManagerItem_allocating;
break;
case DownloadManager.STATE_CHECKING :
tmp = ManagerItem_checking + ": " + formatPercentFromThousands(manager.getStats().getCompleted());
break;
case DownloadManager.STATE_FINISHING :
tmp = ManagerItem_finishing;
break;
case DownloadManager.STATE_READY :
tmp = ManagerItem_ready;
break;
case DownloadManager.STATE_DOWNLOADING :
tmp = ManagerItem_downloading;
break;
case DownloadManager.STATE_SEEDING :
DiskManager diskManager = manager.getDiskManager();
if ((diskManager != null) && diskManager.getCompleteRecheckStatus() != -1) {
int done = diskManager.getCompleteRecheckStatus();
if ( done == -1 ){
done = 1000;
}
tmp = ManagerItem_seeding + " + " + ManagerItem_checking + ": " + formatPercentFromThousands( done );
}else if(manager.getPeerManager()!= null && manager.getPeerManager().isSuperSeedMode()){
tmp = ManagerItem_superseeding;
}else{
tmp = ManagerItem_seeding;
}
break;
case DownloadManager.STATE_STOPPING :
tmp = ManagerItem_stopping;
break;
case DownloadManager.STATE_STOPPED :
tmp = manager.isPaused()?ManagerItem_paused:ManagerItem_stopped;
break;
case DownloadManager.STATE_QUEUED :
tmp = ManagerItem_queued;
break;
case DownloadManager.STATE_ERROR :
tmp = ManagerItem_error + ": " + manager.getErrorDetails();
break;
default :
tmp = String.valueOf(state);
}
if (manager.isForceStart() &&
(state == DownloadManager.STATE_SEEDING ||
state == DownloadManager.STATE_DOWNLOADING))
tmp = ManagerItem_forced + " " + tmp;
return( tmp );
}
public static String
formatDownloadStatusDefaultLocale(
DownloadManager manager )
{
int state = manager.getState();
String tmp = "";
DiskManager dm = manager.getDiskManager();
switch (state) {
case DownloadManager.STATE_WAITING :
tmp = MessageText.getDefaultLocaleString("ManagerItem.waiting");
break;
case DownloadManager.STATE_INITIALIZING :
tmp = MessageText.getDefaultLocaleString("ManagerItem.initializing");
break;
case DownloadManager.STATE_INITIALIZED :
tmp = MessageText.getDefaultLocaleString("ManagerItem.initializing");
break;
case DownloadManager.STATE_ALLOCATING :
tmp = MessageText.getDefaultLocaleString("ManagerItem.allocating");
break;
case DownloadManager.STATE_CHECKING :
tmp = MessageText.getDefaultLocaleString("ManagerItem.checking");
break;
case DownloadManager.STATE_FINISHING :
tmp = MessageText.getDefaultLocaleString("ManagerItem.finishing");
break;
case DownloadManager.STATE_READY :
tmp = MessageText.getDefaultLocaleString("ManagerItem.ready");
break;
case DownloadManager.STATE_DOWNLOADING :
tmp = MessageText.getDefaultLocaleString("ManagerItem.downloading");
break;
case DownloadManager.STATE_SEEDING :
if (dm != null && dm.getCompleteRecheckStatus() != -1 ) {
int done = dm.getCompleteRecheckStatus();
if ( done == -1 ){
done = 1000;
}
tmp = MessageText.getDefaultLocaleString("ManagerItem.seeding") + " + " +
MessageText.getDefaultLocaleString("ManagerItem.checking") +
": " + formatPercentFromThousands( done );
}
else if(manager.getPeerManager()!= null && manager.getPeerManager().isSuperSeedMode()){
tmp = MessageText.getDefaultLocaleString("ManagerItem.superseeding");
}
else {
tmp = MessageText.getDefaultLocaleString("ManagerItem.seeding");
}
break;
case DownloadManager.STATE_STOPPING :
tmp = MessageText.getDefaultLocaleString("ManagerItem.stopping");
break;
case DownloadManager.STATE_STOPPED :
tmp = MessageText.getDefaultLocaleString(manager.isPaused()?"ManagerItem.paused":"ManagerItem.stopped");
break;
case DownloadManager.STATE_QUEUED :
tmp = MessageText.getDefaultLocaleString("ManagerItem.queued");
break;
case DownloadManager.STATE_ERROR :
tmp = MessageText.getDefaultLocaleString("ManagerItem.error").concat(": ").concat(manager.getErrorDetails()); //$NON-NLS-1$ //$NON-NLS-2$
break;
default :
tmp = String.valueOf(state);
}
return( tmp );
}
public static String formatPercentFromThousands(int thousands) {
return percentage_format.format(thousands / 1000.0);
}
public static String formatTimeStamp(long time) {
StringBuffer sb = new StringBuffer();
Calendar calendar = Calendar.getInstance();
calendar.setTimeInMillis(time);
sb.append('[');
sb.append(formatIntToTwoDigits(calendar.get(Calendar.DAY_OF_MONTH)));
sb.append('.');
sb.append(formatIntToTwoDigits(calendar.get(Calendar.MONTH)+1)); // 0 based
sb.append('.');
sb.append(calendar.get(Calendar.YEAR));
sb.append(' ');
sb.append(formatIntToTwoDigits(calendar.get(Calendar.HOUR_OF_DAY)));
sb.append(':');
sb.append(formatIntToTwoDigits(calendar.get(Calendar.MINUTE)));
sb.append(':');
sb.append(formatIntToTwoDigits(calendar.get(Calendar.SECOND)));
sb.append(']');
return sb.toString();
}
public static String formatIntToTwoDigits(int n) {
return n < 10 ? "0".concat(String.valueOf(n)) : String.valueOf(n);
}
public static String
formatDate(
long date )
{
if ( date == 0 ){
return( "" );
}
SimpleDateFormat temp = new SimpleDateFormat("dd-MMM-yyyy HH:mm:ss");
return( temp.format(new Date(date)));
}
public static String
formatDateShort(
long date )
{
if ( date == 0 ){
return( "" );
}
// 24 hour clock, no point in including AM/PM
SimpleDateFormat temp = new SimpleDateFormat("MMM dd, HH:mm");
return( temp.format(new Date(date)));
}
public static String
formatDateNum(
long date )
{
if ( date == 0 ){
return( "" );
}
SimpleDateFormat temp = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
return( temp.format(new Date(date)));
}
public static String
formatTime(
long time )
{
return( TimeFormatter.formatColon( time / 1000 ));
}
/**
* Format a real number to the precision specified. Does not round the number
* or truncate trailing zeros.
*
* @param value real number to format
* @param precision # of digits after the decimal place
* @return formatted string
*/
public static String
formatDecimal(
double value,
int precision)
{
return formatDecimal(value, precision, TRUNCZEROS_NO, ROUND_NO);
}
/**
* Format a real number
*
* @param value real number to format
* @param precision max # of digits after the decimal place
* @param bTruncateZeros remove any trailing zeros after decimal place
* @param bRound Whether the number will be rounded to the precision, or
* truncated off.
* @return formatted string
*/
public static String
formatDecimal(
double value,
int precision,
boolean bTruncateZeros,
boolean bRound)
{
if (Double.isNaN(value) || Double.isInfinite(value)) {
return Constants.INFINITY_STRING;
}
double tValue;
if (bRound) {
tValue = value;
} else {
// NumberFormat rounds, so truncate at precision
if (precision == 0) {
tValue = (long) value;
} else {
double shift = Math.pow(10, precision);
tValue = ((long) (value * shift)) / shift;
}
}
int cache_index = (precision << 2) + ((bTruncateZeros ? 1 : 0) << 1)
+ (bRound ? 1 : 0);
NumberFormat nf = null;
if (cache_index < cached_number_formats.length) {
nf = cached_number_formats[cache_index];
}
if (nf == null) {
nf = NumberFormat.getNumberInstance();
nf.setGroupingUsed(false); // no commas
if (!bTruncateZeros) {
nf.setMinimumFractionDigits(precision);
}
if (bRound) {
nf.setMaximumFractionDigits(precision);
}
if (cache_index < cached_number_formats.length) {
cached_number_formats[cache_index] = nf;
}
}
return nf.format(tValue);
}
/**
* Attempts vaguely smart string truncation by searching for largest token and truncating that
* @param str
* @param width
* @return
*/
public static String
truncateString(
String str,
int width )
{
int excess = str.length() - width;
if ( excess <= 0 ){
return( str );
}
excess += 3; // for ...
int token_start = -1;
int max_len = 0;
int max_start = 0;
for (int i=0;i<str.length();i++){
char c = str.charAt(i);
if ( Character.isLetterOrDigit( c ) || c == '-' || c == '~' ){
if ( token_start == -1 ){
token_start = i;
}else{
int len = i - token_start;
if ( len > max_len ){
max_len = len;
max_start = token_start;
}
}
}else{
token_start = -1;
}
}
if ( max_len >= excess ){
int trim_point = max_start + max_len;
return( str.substring( 0, trim_point - excess ) + "..." + str.substring( trim_point ));
}else{
return( str.substring( 0, width-3 ) + "..." );
}
}
// Used to test fractions and displayformatter.
// Keep until everything works okay.
public static void main(String[] args) {
// set decimal display to ","
//Locale.setDefault(Locale.GERMAN);
double d = 0.000003991630774821635;
NumberFormat nf = NumberFormat.getNumberInstance();
nf.setMaximumFractionDigits(6);
nf.setMinimumFractionDigits(6);
String s = nf.format(d);
System.out.println("Actual: " + d); // Displays 3.991630774821635E-6
System.out.println("NF/6: " + s); // Displays 0.000004
// should display 0.000003
System.out.println("DF: " + DisplayFormatters.formatDecimal(d , 6));
// should display 0
System.out.println("DF 0: " + DisplayFormatters.formatDecimal(d , 0));
// should display 0.000000
System.out.println("0.000000:" + DisplayFormatters.formatDecimal(0 , 6));
// should display 0.001
System.out.println("0.001:" + DisplayFormatters.formatDecimal(0.001, 6, TRUNCZEROS_YES, ROUND_NO));
// should display 0
System.out.println("0:" + DisplayFormatters.formatDecimal(0 , 0));
// should display 123456
System.out.println("123456:" + DisplayFormatters.formatDecimal(123456, 0));
// should display 123456
System.out.println("123456:" + DisplayFormatters.formatDecimal(123456.999, 0));
System.out.println(DisplayFormatters.formatDecimal(0.0/0, 3));
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -