java-求高手解答:DecimalFormat四舍五入问题。

问题描述

求高手解答: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

java-求高手解答:DecimalFormat四舍五入问题。的相关文章

java 调用windows api 问题 求高手解答

问题描述 用java调用windowsapi能否体现调用接口过程,能否查看数据在内存中变换过程???求高手解答!!!!

hibernate-Maven test一个Web项目,报错,弄了一天没弄好,求高手解答

问题描述 Maven test一个Web项目,报错,弄了一天没弄好,求高手解答 org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'defaultServletHandlerMapping' defined in class path resource [org/springframework/web/servlet/config/annotation/Delegating

java-openmeetings无法进入登录页面 页面报错Internal error 求高手解答

问题描述 openmeetings无法进入登录页面 页面报错Internal error 求高手解答 用的是apache-openmeetings-3.0.7 连接的是oracle 安装完成后访问一切正常,但是关掉red5 再次启动后 页面无法进入 页面报错:Internal error 后台报错信息为: ERROR 12-30 14:22:42.142 DefaultExceptionMapper.java 255077 170 org.apache.wicke t.DefaultExcept

char-java中参数传递变换的问题,求问:结果为什么是这样的啊??求高手解答!拜谢~

问题描述 java中参数传递变换的问题,求问:结果为什么是这样的啊??求高手解答!拜谢~ 求问:结果为什么是这样的啊?? change:Test change:g change:b change:c TestPram:Hello TestPram:g TestPram:b TestPram:c 代码如下: public class TestPram { String str = "Hello"; char[] ch = {'a','b','c'}; public static void

c语言问题-求高手解答这道题目,,有点挑战喔。。

问题描述 求高手解答这道题目,,有点挑战喔.. 我想了好久不太会写.......................第五题 解决方案 这难道不是只有四个题目 解决方案二: 第3题打错了........ 解决方案三: 可以用单向链表来实现. 解决方案四: 用java我还知道怎么做,,数据结构还是不怎么会

spring 报错,求高手解答

问题描述 spring 报错,求高手解答 代码: package com.test.aop; import org.aspectj.lang.JoinPoint; import org.aspectj.lang.ProceedingJoinPoint; import org.aspectj.lang.annotation.After; import org.aspectj.lang.annotation.AfterReturning; import org.aspectj.lang.annota

异常-问题如下,求高手解答,谢谢

问题描述 问题如下,求高手解答,谢谢 代码如下: //并发图片上传import java.io.*;import java.net.*; class PicClient2{ public static void main(String[] args) throws Exception { Socket s = new Socket(InetAddress.getByName(""localhost"")11111); BufferedInputStream bufi

javaee-weblogic启动报错,求高手解答!!

问题描述 weblogic启动报错,求高手解答!! product spec-version:null]: The encoding jsp-descriptor param has been deprecated. Consider declaring the encoding in th e jsp-config element (web.xml) or as a page directive (pageEncoding) instead.> java.lang.ExceptionInIni

关于weblogic 线程中出现cpu线程过高dump文件,求高手解答

问题描述 关于weblogic 线程中出现cpu线程过高dump文件,求高手解答 "[ACTIVE] ExecuteThread: '894' for queue: 'weblogic.kernel.Default (self-tuning)'" id=914 idx=0xe4c tid=15267 prio=5 alive, parked, native_blocked, daemon at jrockit/vm/Locks.park0(J)V(Native Method) at j

List里存储的数据库数据怎么到页面上显示都是0呢?求高手解答

问题描述 我的UserAction里的代码如下:privateList<UserBean>findAllUser(){log.info("getalluserinf...");List<UserBean>list=newArrayList<UserBean>();UserBeanuser;Connectionconn=getConn();Stringsql="SELECT*FROMusersORDERBYno";PreparedS