-2

我正在尝试格式化一个 trafficstats 值,使其显示为 12.22 MB(而不是现在显示的 12.00000)但是在使用以下方法时我不断收到强制关闭错误:

String.format("%1$,.2f", info);
info += ("\tWifi Data Usage: " + (double) (TrafficStats.getTotalRxBytes() + TrafficStats.getTotalTxBytes() - (TrafficStats.getMobileRxBytes() + TrafficStats.getMobileTxBytes())) / 1000000  + " MB");
info += ("\tMobile Data Usage: " + (double) (TrafficStats.getMobileRxBytes() + TrafficStats.getMobileTxBytes()) / 1000000  + " MB");

附言

我也尝试使用以下方法(在下面的第一个答案之后)

NumberFormat nf= new NumberFormat();
        nf.setMaximumFractionDigits(2);
        nf.setMinimumFractionDigits(2);

        String result= nf.format(info);

但是它导致:“无法实例化类型 NumberFormat”尽管导入 java.text.NumberFormat;被调用

4

2 回答 2

2

使用数字格式

NumberFormatabstract,这意味着您不可能按原样实例化它。您需要使用该NumberFormat.getInstance方法,该方法将为您创建一个匿名的具体子类,或者您自己实例化一个具体实例。你可能想要第二种方式,看起来像这样:

// DecimalFormat is a concrete subclass of NumberFormat.
NumberFormat nf = new DecimalFormat("#.##"); // Set the format to "#.##"

String result = nf.format(11.987654321); // result is now the String "11.99"

您可以通过更改传递给DecimalFormat构造函数的格式字符串来更改格式。此处的示例将为您提供两位小数,但整个规范也可在 docs中找到。

我还会清理你的开始部分,使它们更清晰、更易于阅读。这是一个简单的重写,每个步骤都明确列出:

String info = "";
double mobileMB = (TrafficStats.getMobileRxBytes() + TrafficStats.getMobileTxBytes() / 1000000.0);
double totalMB = ((TrafficStats.getTotalRxBytes() + TrafficStats.getTotalTxBytes()) / 1000000.0) - mobileMB;

NumberFormat nf = new DecimalFormat("#.##");
String totalMBString = nf.format(totalMB);
String mobileMBString = nf.format(mobileMB);

info += String.format("\tWifi Data Usage: %sMB\tMobile Data Usage: %s", 
        totalMBString, mobileMBString);

使用字符串格式

你也有另一种选择。由于这是一个非常简单的应用程序,因此数字格式选项String.format可能比NumberFormat. 在这种情况下,你会想要做这样的事情:

info += String.format("\tWifi Data Usage: %.2fMB", /* Put a number in here */);
info += String.format("\tMobile Data Usage: %.2fMB" /* Put the other number in here */);

但是,这种方式总是会导致两位小数,所以你会得到12.00MB而不是12MB.

于 2013-06-13T19:08:26.110 回答
0

这很快就变成了一团糟。将您的代码和亨利的代码一起压缩应该可以工作,看起来像这样......

double totalBytes = (double) TrafficStats.getTotalRxBytes() + TrafficStats.getTotalTxBytes();
double mobileBytes = TrafficStats.getMobileRxBytes() + TrafficStats.getMobileTxBytes();
totalBytes -= mobileBytes;
totalBytes /= 1000000;
mobileBytes /= 1000000;

NumberFormat nf = new DecimalFormat("#.##");
String totalStr = nf.format(totalBytes);
String mobileStr = nf.format(mobileBytes);
String info = String.format("\tWifi Data Usage: %s MB\tMobile Data Usage, %s", totalStr, mobileStr);

info 应该包含您要查找的字符串。

于 2013-06-13T19:41:22.537 回答