首页 > 解决方案 > 在 Excel 中格式化科学计数法

问题描述

是否可以将科学记数法中的数字格式化为以 10 为底的指数而不是 Excel 中的 E?例如,Excel 将 0.00123 转换为 1.23E3,但我想要格式1.23x10^3

标签: excel-formula

解决方案


这在 Excel 中使用标准数字格式是不可能的。

您当然可以使用 将您的号码转换为文本字符串=TEXT(A1;"0.00E+00"),然后您可以将此文本字符串转换为您想要的格式的新文本字符串。上标有点棘手,因为您必须使用UNICHAR函数显示它们(此函数自 Excel 2013 起可用)。

该函数使用的 Unicode 值如下(从上标 0 到 9): 8304,185,178,179,8308,8309,8310,8311,8312,8313

所以上标 50 将是=UNICHAR(8309)&UNICHAR(8304)

您可以在工作簿的其他位置使用此值创建一个命名范围,因此使用INDEX. 实际上,我会创建两个范围,一个用于指数的第一个数字(您没有 0,而是一个空字符串,因为您不想显示 10^03 而是 10^3),以及第二个是指数的第二个数字(保留 0)。

总结一下:

  • 将数字转换为文本字符串=TEXT(A1;"0.00E+00")
  • 将“E”替换为“x”
  • 将“+”替换为“10”
  • 如果数字是负数,添加一个-
  • 用相应的上标替换最后两个字符(转换回数字,NUMBERVALUE()然后用于INDEX()获取 Unicode 值以输入UNICHAR函数。

所以对于最后一个数字,公式是(在我的例子中,Unicode 值的命名范围是 EXPO1 和 EXPO2):
=UNICHAR(INDEX(EXPO2;1;NUMBERVALUE(RIGHT(A1;1))+1))
对于指数的第一个数字(即文本字符串的最后一个字符),使用这个公式转换为上标:
=UNICHAR(INDEX(EXPO1;1;NUMBERVALUE(LEFT(RIGHT(A1;2);1)+1)))

我在这里有点懒惰,我也可以使用MID而不是LEFT/RIGHT组合。请注意,命名范围现在是 EXPO1,其中第一个值是空字符串 (8203) 的 Unicode 值。

整个公式为:
=LEFT(TEXT(A1;"0.00E+00");4)& "x10"& UNICHAR(INDEX(EXPO1;1;NUMBERVALUE(LEFT(RIGHT(TEXT(A1;"0.00E+00");2);1)+1)))& UNICHAR(INDEX(EXPO2;1;NUMBERVALUE(RIGHT(TEXT(A1;"0.00E+00");1))+1))

EXPO1 和 EXPO2 的命名范围如上所述。

要使公式完全自我维持,您可以将它们硬编码到公式中,因此变为 then :
=LEFT(TEXT(A1;"0.00E+00");4)& "x10"& UNICHAR(INDEX({8203,185,178,179,8308,8309,8310,8311,8312,8313};1;NUMBERVALUE(LEFT(RIGHT(TEXT(A1;"0.00E+00");2);1)+1)))& UNICHAR(INDEX({8304,185,178,179,8308,8309,8310,8311,8312,8313};1;NUMBERVALUE(RIGHT(TEXT(A1;"0.00E+00");1))+1))

最后,请注意公式取决于您如何将数字转换为文本。根据 OP 初始问题,我在逗号 ( "0.00E+00") 后使用了 2 位精度。如果要显示更多,则必须LEFT在我的示例中使用第一个公式提取 4 个以上的字符。


推荐阅读