请问:在Java语言中如何把一个浮点数精确到小数点后的某几位?

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了请问:在Java语言中如何把一个浮点数精确到小数点后的某几位?相关的知识,希望对你有一定的参考价值。

在Java语言中输出一个浮点数,它会给出默认的小数。我现在要求精确到小数点后的某几位怎么办?如下面的一道题目,求a=1/1! 1/2! 1/3! ...... 1/n!且a精确到小数点后5位。详细一点。

-- Math.round()
(double) (Math.round(sd3*10000)/10000.0); 

这样为保持4位 

(double) (Math.round(sd3*100)/100.0); 

这样为保持2位.

-- BigDecimal
//保留小数点后两位小数
public double Number2(double pDouble)

  BigDecimal  bd=new  BigDecimal(pDouble);
  BigDecimal  bd1=bd.setScale(2,bd.ROUND_HALF_UP);
  pDouble=bd1.doubleValue();
  long  ll = Double.doubleToLongBits(pDouble);
  
  return pDouble;

格式化输出数字

-- NumberFormat
--java.text 包中的一些包可以处理这类问题。下面的简单范例使用那些类解决上面提出的问题:
    import java.text.NumberFormat;
    import java.util.Locale;
    public class DecimalFormat1 
        public static void main(String args[]) 
            // 得到本地的缺省格式
            NumberFormat nf1 = NumberFormat.getInstance();
            System.out.println(nf1.format(1234.56));
            // 得到德国的格式
            NumberFormat nf2 =
                NumberFormat.getInstance(Locale.GERMAN);
            System.out.println(nf2.format(1234.56));
        
    

-- DecimalFormat
    import java.text.DecimalFormat;
    import java.util.Locale;
    public class DecimalFormat2 
        public static void main(String args[]) 
            // 得到本地的缺省格式
            DecimalFormat df1 = new DecimalFormat("####.000");
            System.out.println(df1.format(1234.56));
            // 得到德国的格式
            Locale.setDefault(Locale.GERMAN);
            DecimalFormat df2 = new DecimalFormat("####.000");
            System.out.println(df2.format(1234.56));
        
    

参考技术A 1.(double) (Math.round(sd3*10000)/10000.0);

这样为保持4位

(double) (Math.round(sd3*100)/100.0);

这样为保持2位.

2.另一种办法
import java.text.DecimalFormat;

DecimalFormat df2 = new DecimalFormat("###.00");

DecimalFormat df2 = new DecimalFormat("###.000");

System.out.println(df2.format(doube_var));

第一个为2位,第二个为3位.
参考技术B 使用bigdecimal方法计算,这是最精确的 参考技术C float f=11.12356;
java.text.DecimalFormat df = new java.text.DecimalFormat("########.00");
df.format(f);

请问java提供啥方法实现将一个浮点数,四舍五入只保留小数点后两位

第一:从数据库读出时可以进行操作,将读出的数据进行处理后输出,这里可以用数据库提供的方法。这里不多提。
第二:也可以用JAVA进行处理,方法很多。
这里说两种吧:
第一
BigDecimal bd = new BigDecima("5.14881");
bd = bd.setScale(2,BigDecimal.ROUND_HALF_UP); System.out.println(bd);

第二
static double convert(double value)
long l1 = Math.round(value*100); //四舍五入
double ret = l1/100.0; //注意:使用 100.0 而不是 100
return ret;


public static void main(String[] args)
// BigDecimal bd = new BigDecimal("3.14159265");
// bd = bd.setScale(2,BigDecimal.ROUND_HALF_UP);
double bd = convert(3.14559);

System.out.println(bd);
参考技术A (float)Math.round(yournum*100)/100;

yournum 就是你给出的浮点数,然后执行这句话就是你要的结果。以后提问题最好给点悬赏分。
参考技术B 需要你进行格式化一下:
String parten = "#.##";
DecimalFormat decimal = new DecimalFormat(parten);
String str= decimal.format(你要格式化的东西);本回答被提问者采纳
参考技术C 比如:

float a = (float)1.123;
DecimalFormat decimal = new DecimalFormat("#.##");
String result = decimal.format(""+a);

这样result就等于1.12了
参考技术D BigDecimal bd = new BigDecimal(0.7553f);
bd = bd.round(new MathContext(2));
System.out.println(bd);
---------------------------------------
注:
java.math.BigDecimal(float value)
java.math.MathContext(int precision)
BigDecimal.round(MathContext): BigDecimal
明白了吧?
另外引申一句:所有的数值处理都在java.math包中,所有的文本格式处理都在java.text包中,如果你希望输入保留两位小数的文本也可以用java.text包中的DecimalFormat类来处理。不过它返回的是字符串。

以上是关于请问:在Java语言中如何把一个浮点数精确到小数点后的某几位?的主要内容,如果未能解决你的问题,请参考以下文章

C语言浮点数除法可以精确到多少位小数

请问java提供啥方法实现将一个浮点数,四舍五入只保留小数点后两位

C语言编程序时怎么控制浮点型输出的小数点精确到几位

浮点数怎么表示精确度?

精度浮点型数据精确到了几位小数呢?

Java中怎么把除法精确到小数点后100位