`
步青龙
  • 浏览: 291614 次
  • 性别: Icon_minigender_1
  • 来自: 杭州
博客专栏
72ba33fb-eefe-3de1-bd65-82a6e579265d
Java面试
浏览量:0
社区版块
存档分类
最新评论

Java与Javascript 最近值

 
阅读更多

 

		Double price = 19.0000;
		Double[] source  = new Double[]{18.01,998.9,45.66,6.78,20.00};
		// 处理
		Double[] absource = new Double[source.length];
		for (int i = 0; i < source.length; i++) {
			absource[i]=Math.abs(source[i]-price);
		}
		Double[] tempAbsource = absource.clone();// 一个副本(浅复制)
		Arrays.sort(absource); 
		Double min =  absource[0];// 绝对值的最小值
		// Double max =  absource[absource.length-1];// 绝对值的最大值
		
		
		//  如果price为12,数组中绝对值最小为1 里面有 11和13的话,找11 还是找13?
		// System.out.println(min+price);// 不可以这么写
		
		/*
		 * 如果有多个相同的接近值 入 12与11,11  和  12 与11,13(可能多个) 
		 * 他们的绝对值是一样的,所以都要列出来。循环不可少
		 */ 
		for (int i = 0; i < source.length; i++) {
			if(tempAbsource[i].equals(min)){
				System.out.println(""+ source[i]);
			}
		}

 

如果不想用克隆方式 那最后一个for循环也可以直接这么写

		for (int i = 0; i < source.length; i++) {
			Double d = Math.abs(source[i]-price);
			if(d.equals(min)){
				System.out.println(""+ source[i]);
			}
		}

 效果是一样的。克隆方式值需要复制一个副本,而这种方式要循环里生成很多的对象。

 用JS来实现求最近值:

var arr=[26,25.01,25.01,24.99,56,67,24,35,46,57,68],s=25.00,result=[];
for(var i=0,arr1=[];i<arr.length;i++){
    arr1[i]=Math.abs(arr[i]-s);
}
var minVal=Math.min.apply(null,arr1);//或者var minVal = Math.min.apply({},arr1);
for(var i=0;i<arr1.length;i++){
    if (arr1[i]==minVal){
        result.push(arr[i])
    }
}
console.log(result+"");

     

 

 

 

 

 

 

 

分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics