1.5
,不考虑有效数字数量,与1.50
(甚至是1.5000000000000
)相同。
您需要将数字的值与其表现形式分开。
如果您想将其输出为两个小数位数,只需使用String.format
,例如:
public class Test
{
public static void main(String[] args) {
double d = 1.50000;
System.out.println(d);
System.out.println(String.format("%.2f", d));
}
}
它的输出结果为:
1.5
1.50
如果您仍希望有一个能够完成上述所有功能并提供特定格式的函数,您需要使用类似以下代码返回字符串:
public static String roundOff(double num, double acc, String fmt) {
num *= acc;
num = Math.ceil(num);
num /= acc;
return String.format(fmt, num);
}
并使用以下代码进行调用:
resultString = roundOff(value, 20, "%.2f"); // or 100, see below.
这将使您能够根据需要自定义准确性和输出格式,尽管如果您想要简单性,仍然可以硬编码值:
public static String roundOff(double num) {
double acc = 20;
String fmt = "%.2f";
num *= acc;
num = Math.ceil(num);
num /= acc;
return String.format(fmt, num);
}
最后注意一点:你的问题说你想保留“两位小数”,但这与你使用的精度20
不太一致,因为它会将其舍入到1/20
的下一个倍数。如果你真的想将其舍入到两位小数,你应该使用100
作为accuracy
的值。
double
中没有不同的表示方式,它们在数值上是相同的,因此它们只有一个共同的double
表示。 - Dawood ibn KareemString
,而不是double
,这样你就可以对它进行任何类型的格式化。 - Dawood ibn Kareem20
吗?也许我误解了你的意图,但是你对于1.489
的方法不会返回1.49
。我认为你应该将精度设置为100
以保留两位小数。 - cyon