我想将字符串格式的数字转换为带一个小数点的百分比值。以下是我的示例输入和预期输出。
预期成绩:
"0.0195" => "2.0%"
"0.0401" => "4.0%"
我知道这可能是一个简单的问题,但我无法使用 java API 找到确切的解决方案,我尝试了 RoundingMode 枚举下存在的所有舍入模式,但没有舍入模式给出我的预期结果。你能帮忙吗,我可能遗漏了一些东西。
import java.math.RoundingMode;
import java.text.NumberFormat;
public class RoundingModeExample {
public static void main(String[] args) {
System.out.println(formatPercentage("0.0195") + "(expected 2.0%)");
System.out.println(formatPercentage("0.0401") + "(expected 4.0%)");
}
private static String formatPercentage(String number) {
String formattedValue = "";
NumberFormat numberFormat = NumberFormat.getPercentInstance();
numberFormat.setMinimumFractionDigits(1);
numberFormat.setRoundingMode(RoundingMode.HALF_UP);
try {
formattedValue = numberFormat.format(Double.valueOf(number));
} catch (NumberFormatException e) {
formattedValue = number;
}
return formattedValue;
}
}
Run Code Online (Sandbox Code Playgroud)
上述程序的输出:
1.9%(预期2.0%)
4.0%(预期4.0%)
0.0195 的问题在于没有double精确的数字在数学上完全等于它。当你在程序源代码中写0.0195或者将字符串“0.0195”解析成double时,你得到的数字实际上是少了一点。这就是格式化程序将其四舍五入为 1.9% 的原因。
您可以通过根本不使用double数据类型来解决这个问题:
formattedValue = numberFormat.format(new BigDecimal(number));
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
65 次 |
| 最近记录: |