带浮点数的格式
Format for number with floating point
我想对不同长度的输入数据实现动态浮点格式显示指定长度。例如 x.xxxx, xx.xxxx, xxx.xx, xxxx.x
。
换句话说,
如果我有1.4
,我需要1.4000
。
如果13.4
那么我需要13.400
,对于每个案例长度应该是5位数字(没有点)。
我正在使用
DecimalFormat df2 = new DecimalFormat("000000");
但无法构建正确的模式。有什么解决办法吗?
感谢您的帮助。
以下不是生产代码。它不考虑前导减号,也不考虑 noDigits
常量的非常高的值。但我相信您可以将其用作起点。感谢 Mzf 的启发。
final static int noDigits = 5;
public static String myFormat(double d) {
if (d < 0) {
throw new IllegalArgumentException("This does not work with a negative number " + d);
}
String asString = String.format(Locale.US, "%f", d);
int targetLength = noDigits;
int dotIx = asString.indexOf('.');
if (dotIx >= 0 && dotIx < noDigits) {
// include dot in result
targetLength++;
}
if (asString.length() < targetLength) { // too short
return asString + "0000000000000000000000".substring(asString.length(), targetLength);
} else if (asString.length() > targetLength) { // too long
return asString.substring(0, targetLength);
}
// correct length
return asString;
}
我想对不同长度的输入数据实现动态浮点格式显示指定长度。例如 x.xxxx, xx.xxxx, xxx.xx, xxxx.x
。
换句话说,
如果我有1.4
,我需要1.4000
。
如果13.4
那么我需要13.400
,对于每个案例长度应该是5位数字(没有点)。
我正在使用
DecimalFormat df2 = new DecimalFormat("000000");
但无法构建正确的模式。有什么解决办法吗? 感谢您的帮助。
以下不是生产代码。它不考虑前导减号,也不考虑 noDigits
常量的非常高的值。但我相信您可以将其用作起点。感谢 Mzf 的启发。
final static int noDigits = 5;
public static String myFormat(double d) {
if (d < 0) {
throw new IllegalArgumentException("This does not work with a negative number " + d);
}
String asString = String.format(Locale.US, "%f", d);
int targetLength = noDigits;
int dotIx = asString.indexOf('.');
if (dotIx >= 0 && dotIx < noDigits) {
// include dot in result
targetLength++;
}
if (asString.length() < targetLength) { // too short
return asString + "0000000000000000000000".substring(asString.length(), targetLength);
} else if (asString.length() > targetLength) { // too long
return asString.substring(0, targetLength);
}
// correct length
return asString;
}