带分组数字的格式

问题描述 投票:0回答:2

我有一列信用卡号,其中每个数字都以字符串形式明确输入:

4805123412344564
。现在我希望它们显示为以四为一组的数字。因此,我指定了数字格式
0000 0000 0000 0000
并按预期显示了数字:
4805 1234 1234 4564

但是,当我现在在这个单元格中输入一个新数字时,它会再次以纯字符串显示:

4805123412344564
。当我检查分配的格式(格式→数字)时,它仍然在该格式条目之前显示检查钩:
0000 0000 0000 0000
。我现在可以再次单击此条目(尽管已经选择),然后格式将根据需要正确显示。但我不想!

如何使数字以所需的方式显示而无需再次重新分配格式?我也尝试过

#### #### #### ####
0000" "0000" "0000" "0000
没有任何不同的行为。

google-sheets format
2个回答
1
投票

我认为使用数字格式这实际上是不可能的,因为Google表格(继承自Excel)不支持> 15位有效数字。当使用数字格式 0000 0000 0000 0000 时,您的示例 4805123412344564 实际上变成 4805 1234 1234 4560 (第 16 位丢失)。

一种替代方法是对纯数字列使用字符串操作,以公式化方式生成另一列,其中的数字格式正确。如果您的信用卡号码在 A 列中,您可以使用:

=map(tocol(A:A,1),lambda(each,join(" ",regexextract(each,"(\d{4})(\d{4})(\d{4})(\d{4})"))))

0
投票

存储为数字会有问题。这是因为 Google Sheet 可能使用 IEEE 754 double 来存储大数字的浮点表示形式,它提供 15-17 位有效数字,而信用卡号有 16 位数字。

但是,您可以将自己的格式转换为文本。例如,

=let(input,A1:A,
     arrayformula(if(input<>"",
                     left(to_text(input),4)&" "&mid(input,5,4)&" "&mid(input,9,4)&" "&right(input,4),
                     )))

请注意,当前无法选择将单元格格式设置为分组文本。 (无论如何,它相当于子字符串和正则表达式模式,我们已经有公式了。)

© www.soinside.com 2019 - 2024. All rights reserved.