2017-06-17 65 views
0

我有一个场景,我需要比较两个数字并确定第二个最重要的数字是否有差异。这些数字是10位数的小数。找到第二个最高有效位

0.0000098765 
0.0000098766 
// Change = false 

0.0000098765 
0.0000099765 
// Change = true 

0.0000098765 
0.0000198765 
// Change = true 

看看我上面的例子,并重新思考我想知道什么时候第二位或第一位有效数字发生改变的问题。

我知道如何回合,但我不知道如何解决这个问题。

function significantDigitChange(number1, number2) { 
    var shift1 = number1 * Math.pow(10,10); 
    var shift2 = number2 * Math.pow(10,10); 

    if (shift1.toString().slice(0,2) != shift2.toString().slice(0,2)) { 
    return true 
    } else { 
    return false 
    } 
} 
+0

你事先知道你关心哪些数字?如果数字是0.35,它仍然是你关心的3位数字(右边第二位)?或者,您是否可以事先说出这是您所关心的小数第9位数字,无论该数字具有什么样的价值?如果你比较0.35到0.34怎么办?如果您将0.0000000035与0.0000000034进行比较,该怎么办? – jfriend00

+0

不幸的是,要比较的数字可以在精度范围内的任何地方。根据上面的例子,我可以比较0.35和0.34在一个实例中,然后0.0000000035与0.0000000034 – Dercni

+0

您没有回答我的任何问题。如果没有答案,澄清问题就无能为力。请重新阅读我所问的内容并提供答案。此外,比较不同的长度如0.351与0.350000001时该怎么办。你的问题根本没有被描述得足够理解。 – jfriend00

回答

0

做一个函数来截断(正)数量的一些显著数字:

function toPrecision(n, precision) { 
    var scale = 10 ** (Math.floor(Math.log10(n)) - precision + 1); 

    return Math.trunc(n/scale) * scale; 
} 

使用它在两个值和比较平等:

function significantDigitChange(n1, n2) { 
    return toPrecision(n1, 2) !== toPrecision(n2, 2); 
} 
相关问题