问题描述
- 求高手解答:DecimalFormat四舍五入问题。
-
我需要将一个数字格式化为###.0000格式,比如1.2,格式化为1.2000
12.00005,我希望得到12.0001
很遗憾我现在没有找到好的办法可以达到我的目的。
下面为我的测试代码。
求大神给个方法,最好也能解释下java.text.DecimalFormat的机制。public class FormatTest { public static void main(String[] args) { java.text.DecimalFormat df = new java.text.DecimalFormat("###.0000"); java.lang.Double db1 = new java.lang.Double("12.00005"); java.lang.Double db2 = new java.lang.Double("12.00006"); java.lang.Double db3 = new java.lang.Double("12.000055"); java.lang.Double db4 = new java.lang.Double("12.000056"); System.out.println(df.format(db1)); // 输出结果是12.0000 System.out.println(df.format(db2)); // 输出结果是12.0001 System.out.println(df.format(db3)); // 输出结果是12.0001 System.out.println(df.format(db4)); // 输出结果是12.0001 } }
解决方案
double d = 3.1465926;
String result = String.format("%.4f", d);
System.out.println(result);
可以使用这个试试!
解决方案二:
楼主代码没错,而运行结果不是楼主所想的原因:是因为java标准是美国人制定的,而美国人常用运算思维是上述结果,不同于我们中国人的思维是四舍五入,所以java默认的格式是HALF_EVEN,这是美国人的思维。想要得到楼主想要的结果,只要加一行代码就行了。具体代码如下:
import java.text.DecimalFormat;
import java.math.RoundingMode;
public class Test1{
public static void main(String args[]){
DecimalFormat df = new DecimalFormat("###.0000");
df.setRoundingMode(RoundingMode.HALF_UP);
double db1 = 12.00005;
double db2 = 12.00006;
double db3 = 12.000055;
double db4 = 12.000056;
System.out.println(df.format(db1)); // 输出结果是12.0001
System.out.println(df.format(db2)); // 输出结果是12.0001
System.out.println(df.format(db3)); // 输出结果是12.0001
System.out.println(df.format(db4)); // 输出结果是12.0001
}
}
这样就正确了 。
java.math
枚举 RoundingMode
java.lang.Object
继承者 java.lang.Enum
继承者 java.math.RoundingMode
java.text
类 DecimalFormat
java.lang.Object
继承者 java.text.Format
继承者 java.text.NumberFormat
继承者 java.text.DecimalFormat
不同舍入模式下的舍入操作汇总 根据给定的舍入模式将输入数字舍入为一位数的结果
输入数字 UP DOWN CEILING FLOOR HALF_UP HALF_DOWN HALF_EVEN UNNECESSARY
5.5 6 5 6 5 6 5 6 抛出 ArithmeticException
2.5 3 2 3 2 3 2 2 抛出 ArithmeticException
1.6 2 1 2 1 2 2 2 抛出 ArithmeticException
1.1 2 1 2 1 1 1 1 抛出 ArithmeticException
1.0 1 1 1 1 1 1 1 1
-1.0 -1 -1 -1 -1 -1 -1 -1 -1
-1.1 -2 -1 -1 -2 -1 -1 -1 抛出 ArithmeticException
-1.6 -2 -1 -1 -2 -2 -2 -2 抛出 ArithmeticException
-2.5 -3 -2 -2 -3 -3 -2 -2 抛出 ArithmeticException
-5.5 -6 -5 -5 -6 -6 -5 -6 抛出 ArithmeticException
至于详细的帮助,建议楼主下载一份java API文档学习。希望对楼主有帮助
解决方案三:
df.setRoundingMode(RoundingMode.HALF_UP);
加上这句代码试试看试试看
时间: 2024-10-26 22:43:38