我有下表,我正在尝试以非常具体的格式格式化数据。为了将原始值用于其附带函数,我必须格式化原始值,因此有 5 个数值,然后是适用的指数。 由于种种原因,我不能使用严格的科学符号。
这是一个已知的良好示例:0.00011766000000 其显示为:+11766-3
这是另一个很好的例子:-0.00018002000000 它将显示为:-18002-3
在我对更大的数据集进行测试时,似乎一切正常,但是这些数字用于计算物体的轨道旋转,因此精度(在我使用的格式的限制范围内)很重要。
原始值 | 所需输出 | 公式 | 实际产量 |
---|---|---|---|
0.00995253 | +99525-2 | =CONCATENATE(MID(TEXT(J2,"+.#####00000E+#;-.#####00000E+#"),3,5),RIGHT(TEXT(J2,"+.#####E+#;-.#####E-#"),2)) |
99525-2 |
-0.00188400 | -18840-5 | 往上看 | 18840-5 |
我的公式只在正数时有效,在负数时无效。如果我只处理几百个数字,我可以对这些数字进行一些测试,但我要处理数万个这样的数字。
一个可行的解决方案是检测该值是负数还是正数,并使用简单的条件语句将负号连接到字符串。同样,如果它是正数,我会将正号连接到字符串。
我相信类似的东西=IF(B2>=0,CONCATENATE("+",H2),CONCATENATE("-",H2))
会起作用但我想知道我是否遗漏了什么? B2 是原始数据;H2 是预期数据
所以我想知道是否有一种方法可以将值格式化为所需的格式,而无需进行文本操作?我宁愿按照我需要的方式格式化代码,然后使用 Text 函数来捕获所需的值。
答案1
答案2
我必须采取与建议略有不同的方法才能获得正确的输出。我创建了两个公式来实现我最初的目标。我决定坚持使用两个公式,因为如果我愿意,我可以简单地隐藏其他两列。
=CONCATENATE(MID(TEXT(J2,"+.#####00000E+#;-.#####00000E+#"),3,5),RIGHT(TEXT(J2,"+.#####00000E+#;-.#####00000E-#"),2))
=IF(J2>=0,CONCATENATE("+",K2),CONCATENATE("-",K2))
原始值 | 所需输出 | 公式1 | 二级方程式 | 实际产量 |
---|---|---|---|---|
-0.001884 | -18840-2 | 往上看 | 往上看 | -18840-2 |
0.0099525 | +99525-2 | 往上看 | 往上看 | +99525-2 |
虽然从技术上讲,另一种解决方案会产生正确的输出,但我发现我必须明确指出 + 和 - 符号,以便输出才能在最终解决方案中使用实际输出。