java小数点精度

一曲冷凌霜 提交于 2020-01-27 18:02:54

DecimalFormat -> String


java.text.DecimalFormat df = new java.text.DecimalFormat("#.##");  
double d = 3.14159;  
System.out.println(df.format(d)); 
// 2
double d = 3.1415926;
String result = String .format("%.2f");
java.text.DecimalFormat df =new java.text.DecimalFormat("#.00");  
df.format(你要格式化的数字);

double d1 = 3.23456  
double d2 = 0.0;
double d3 = 2.0;
df.format(d1); 
df.format(d2); 
df.format(d3); 
原文链接:https://blog.csdn.net/shiyong1949/article/details/52641152

java.math.BigDecimal


double f = 111231.5585;  
BigDecimal b = new BigDecimal(f);  
doublef1 = b.setScale(2,BigDecimal.ROUND_HALF_UP).doubleValue(); 

下列例题就是一个关于精度的例子:

题意翻译

19世纪的德国数学家赫尔曼·闵可夫斯基(Hermann Minkowski)研究了一种名为出租车几何学的非欧几何。 在出租车几何里T1(x1,y1)T_1(x_1,y_1)T1(x1,y1) T2(x2,y2)T_2(x_2,y_2)T2(x2,y2)两点之间的距离被定义为dis(T1,T2)=∣x1−x2∣+∣y1−y2∣dis(T_1,T_2)=|x_1-x_2|+|y_1-y_2|dis(T1,T2)=∣x1−x2∣+∣y1−y2∣(曼哈顿距离)。 其他定义均与欧几里得几何相同。
例如圆的定义:在同一平面内,到定点(圆心)的距离等于定长(半径)的点的集合。

我们对欧几里得几何与出租车几何两种定义下半径为RRR的圆的面积很感兴趣。解决这个问题的重担就落在你身上了。

输入输出格式

输入格式

仅有一行为圆的半径RRR。 (R≤10000)(R \leq 10000)(R≤10000)

输出格式

第一行输出欧几里得几何下半径为RRR的圆的面积,第二行输出出租车几何下半径为RRR的圆的面积。

注意:你的输出与标准答案绝对误差不超过0.00010.00010.0001将会被认为正确

输入输出样例

输入 #1

1

输出 #1

3.141593
2.000000

输入 #2

21

输出 #2

1385.442360
882.000000

输入 #3

42

输出 #3

5541.769441
3528.000000

我的题解:

import java.math.BigDecimal;
import java.text.DecimalFormat;
import java.util.Scanner;
	
	public class Main{
		static int[] arr=null;
	    public static void main(String[] args) {
	        Scanner sc = new Scanner(System.in);	    
	     int n=sc.nextInt();
	     double S1;
	     double S2;
	     S1=n*n*Math.PI;
	     S2=2*n*n;
	     BigDecimal B1=new BigDecimal(S1);
	     BigDecimal B2=new BigDecimal(S2);
	     S1=B1.setScale(6,BigDecimal.ROUND_HALF_UP).doubleValue();
	     S2=B2.setScale(6,BigDecimal.ROUND_HALF_UP).doubleValue();
	     System.out.println(S1);
	     System.out.println(roundByScale(S2,6));
	    }
        //此函数用来格式化
	    public static String roundByScale(double v, int scale) {
	        if (scale < 0) {
	            throw new IllegalArgumentException(
	                    "The   scale   must   be   a   positive   integer   or   zero");
	        }
	        if(scale == 0){
	            return new DecimalFormat("0").format(v);
	        }
	        String formatStr = "0.";
	        for(int i=0;i<scale;i++){
	            formatStr = formatStr + "0";
	        }
	        return new DecimalFormat(formatStr).format(v);
	    }
	
	}
标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!