【问题标题】:Custom "Maximum Value" Function Ignoring String自定义“最大值”函数忽略字符串
【发布时间】:2022-10-04 18:05:35
【问题描述】:

Column A 中,我有一组数字,格式如下:

K = 千 (10^3)
M = 百万 (10^6)
B = 十亿 (10^9)
...
N = 百万美元 (10^30)
d = 十亿分之一 (10^33)

我希望能够找到最大解析值的索引从这个专栏。

我已经在 Apps 脚本中编写了一个自定义函数,以便在需要对它们进行数学运算时将这些值解析为科学记数法:

/**
 * Parses scientific notation from short notation.
 * 
 * @pararm {number} input The value to parse.
 * @return The parsed number in scientific notation.
 * @customfunction
 */
function parse(input) {
  return String(input).replace('K', 'E+3').replace('M', 'E+6').replace('B', 'E+9').replace('T', 'E+12').replace('q', 'E+15').replace('Q', 'E+18').replace('s', 'E+21').replace('S', 'E+24').replace('o', 'E+27').replace('N', 'E+30').replace('d', 'E+33');
}

例如:=parse("10B") 将产生 10E+9

然后我接受了这个,并尝试创建一个函数来获取最大值的索引:

/**
 * Discern the maximum value contained in a column, and return its index 
 * 
 * @param {string} column The column letter to check
 * @param {number} start The first index (row) to check
 * @param {number} end The last index (row) to check
 * @customfunction
 */
function customMax(column, start, end){

  var max = 0;
  var maxIndex = 0;

  for(var i = start; i<= end;i++){

    var value = SpreadsheetApp.getActiveSheet().getRange(column + String(i)).getValue();
    var parsedVal = parseInt(parse(value));

    if(parsedVal > max){
      max = parsedVal;
      maxIndex = i;
    }
  }

  return maxIndex;
}

这段代码对我来说很有意义,并且看起来应该可以工作,但是:

A
1 300T
2 1d

对于这样的数据,1d300T 大得多,但是运行=customMax("A", "1", "2") 会产生1

我发现的唯一一致性是,Apps 脚本似乎忽略了Td 或任何其他后续字符,并且完全偏离了数字的基数。

【问题讨论】:

  • @Tanaike 不需要道歉 - 输入依次是 A1 和 A2,预期输出是索引 2 应该是最大的,因为 1d 相当于 1E+33,而 300T 只是300E+12
  • 使用Number 而不是parseInt
  • @idfurw 这似乎解决了 OP 的问题,也许您可​​以将其发布为好答案关于这个问题。
  • 我肯定会接受这个作为答案。尽管我也很欣赏Number() 构造函数为何起作用而parseInt() 不起作用的一些见解。
  • @David 你也可以查看这个在线资源:Number() vs parseInt()

标签: google-apps-script google-sheets


【解决方案1】:

使用Number 而不是parseInt 进行科学记数法

example of parseInt() 中所述,

科学记数法的字符串将被省略且不被解释

参考:

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-08-08
    • 1970-01-01
    • 2020-10-27
    • 1970-01-01
    • 1970-01-01
    • 2021-02-23
    相关资源
    最近更新 更多