如何总是以小数点后两位舍入

时间:2013-10-17 11:14:31

标签: java time double double-precision

对于学校的项目,我必须创建一个java程序来从数据库中检索数据。

这是我的代码:

import java.text.*;
import java.util.*;
public class Tijdstip
{
    public Tijdstip()
    {
    }
    public double testTijd(String tijdstip1)
    {
        // splitting the time
        String[] tokens = tijdstip1.split("\\s+");
        int hours = Integer.parseInt(tokens[0]);
        int minutes = Integer.parseInt(tokens[1]);  
        //returning the time
        double result = hours + ((double)minutes/100); 
        return result;      
    }
}

我填写的字符串如下:“7 10”,意思是上午7:10,它必须返回像7.10这样的双字母 但是它返回7.1,我该怎么做才能返回7.10而不是7.1?

5 个答案:

答案 0 :(得分:2)

试试这个

new DecimalFormat("#.00").format(result);

答案 1 :(得分:2)

您需要了解数字的表示方式与显示方式之间的区别。 7.1和7.10之间没有数字差异;没有办法使数字一个而不是另一个。您可以使用输出格式显示 7.1作为7.10,例如在Format类中找到。

作为一个侧面问题:在任何规模的程序中将其存储为双精度都是一个坏主意。有许多用于表示时间的类,它们都考虑了时间划分的非十进制特性。双打不这样做。

答案 2 :(得分:1)

简短的回答是,如果您必须将结果保持为双精度,则无法执行此操作。双精灵对领先或尾随零没有任何了解。只有在将结果格式化为String时才能执行此操作。例如,String.format("%.2f", 7.1)给出字符串"7.10"。每次显示数字时都可以轻松地进行格式化,但是你不能让数字本身记住额外的零。

答案 3 :(得分:0)

当你返回双倍时,它总是截断你的最后一个数字,如果它是零。所以把它变成一个字符串并返回

答案 4 :(得分:-1)

如果您需要在十进制后只有两位数的双精度值,您可以尝试以下操作:

double d = 1.164444;       
double r = Math.rint(d * 100)/100;
System.out.println(r);