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+"");

     

 

 

 

 

 

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值