【问题标题】:Retain precision during numeric sort在数字排序期间保持精度
【发布时间】:2011-12-15 23:17:06
【问题描述】:

我正在使用此函数对数字数组进行排序,其中一些是小数。但在那种情况下,我在这些值上失去了.0。我想在指定时保留此精度,但在未指定时不添加。

例如: [1.5, 2, 0.75, 1.0, 0.75] 应该排序为 [2, 1.5, 1.0, 0.75] 但使用下面的函数排序为 [2, 1.5, 1, 0.75]

var sortNums = function( arr ) {
        // Quit if arr is not an array.
        if ( !$.isArray(arr) ) { return false; }

        // Sort highest to lowest:
        arr.sort(function(a,b) {return (b-a);}); 

        // Remove non-numeric vals and return:
        return $.map(arr, function(v) {if (typeof v === 'number') {return v;}}); 
};

【问题讨论】:

  • 您知道1.01 对计算机来说是同一个数字吗?
  • @minitech 当然! ;) 但我仍然需要这样做 b/c 我稍后会将它们发送到一个字符串,该字符串需要原始值。
  • 所以你需要使用字符串数组,而不是数字数组,因为它们一开始就没有任何格式。 1 === 01 === 0x1 === 1.0(因此需要删除 typeof 检查。)

标签: javascript jquery sorting map numbers


【解决方案1】:

它们本身没有任何类型的精度。但是sort 已经可以正常工作,并且使用 JavaScript 无限有用的自动转换,- 可以为您完成工作。见:http://jsfiddle.net/hqc33/

【讨论】:

    【解决方案2】:

    JavaScript 会删除尾随十进制零。

    var x = 1.0;
    x; // 1
    

    如果您想保留小数,您需要将它们转换为字符串。如果需要,您可以在排序过程中将它们转换为数字。

    【讨论】:

    • 另外,如果你在排序前创建了数组并输出了它,它仍然会删除.0
    • 谢谢/明白了。他们必须从字符串开始。我试图将一个数组用于两个目的——一个需要数字,一个需要字符串。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2016-06-23
    • 2012-06-09
    • 1970-01-01
    • 2017-10-30
    • 2017-01-19
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多