【发布时间】:2015-07-08 19:22:57
【问题描述】:
我已经搜索过,但找不到答案。
无论如何,我需要将一个字符串(从数字转换而来)转换为另一个带有“假定”小数点的字符串。而且这个小数精度需要是可变的。
例如,假设我的伪方法是:
private String getPaddedNumber(String number, Integer decimalPlaces)...
所以用户可以:
getPaddedNumber("200", 0); // "200"
getPaddedNumber("200.4", 2); // "20040"
getPaddedNumber("200.4", 1); // "2004"
getPaddedNumber("200.4", 4); // "2004000"
getPaddedNumber("200.", 0); // "200" this is technically incorrect but we may get values like that.
现在,我实际上已经编写了一个方法来完成所有这些,但它非常强大。然后我想知道,“Java 是否已经有 DecimalFormat 或其他东西?
谢谢。
编辑
这些数字不会以科学计数法的形式出现。
一些数字示例:
"55"
"78.9"
"9444.933"
结果永远不会有小数点。
更多示例:
getPaddedNumber("98.6", 2); // "9860"
getPaddedNumber("42", 0); // "42"
getPaddedNumber("556.7", 5); // "55670000"
EDIT2
这是我目前使用的代码。它并不漂亮,但它似乎正在工作。但我不禁觉得我重新发明了轮子。 Java 是否有原生的东西可以做到这一点?
private static String getPaddedNumber(String number, int decimalPlaces) {
if (number == null) return "";
if (decimalPlaces < 0) decimalPlaces = 0;
String working = "";
boolean hasDecimal = number.contains(".");
if (hasDecimal) {
String[] split = number.split("\\.");
String left = split[0];
String right;
if (split.length > 1)
right = split[1];
else
right = "0";
for (int c = 0; c < decimalPlaces - right.length(); c++)
working += "0";
return left + right + working;
}
for (int c = 0; c < decimalPlaces; c++)
working += "0";
return number + working;
}
【问题讨论】:
-
所以基本上你想要
scientific notation... -
正确,数字“200”是任意的。可能是 400、255、16 等等。
-
getPaddedNumber("200.4", 4);是2004000还是200.4000? -
应该是“2004000”
标签: java string formatting decimalformat