在Excel中格式化带有可选小数位的数字


76

我在Excel的单元格中有数字。我希望对数字进行格式化,以便如果它们具有小数位,则最多显示两个,如果它们没有小数位,则不显示任何数字。

例如。

  • 15的格式应为15,而不是15.00
  • 14.3453453的格式应为14.35
  • 12.1的格式应为12.1
  • 0应该格式化为0

我提出的最接近的自定义格式代码是0.##。不幸的是,该格式设置15.0015。(请注意额外的小数点)。

使问题更加复杂的是,电子表格是从SQL Server Reporting Services导出的结果。因此,没有宏是可能的。哦,看来,这0.##是我最好的选择,他们可以度过额外的时光。

Answers:


29

或者,您可以使用以下解决方案解决“可选”小数点问题:

号码格式: General;[Red](General)

这将相应地加上小数位和小数,同时以更清晰的方式设置负数的格式。

至于发帖人的原始问题,您仍然需要使用公式四舍五入/截断“多余”的小数点。但是,这是一个简单的公式,=ROUND(<value>,<desired decimal places>)在计算上并不十分昂贵。

例子:

2500 -> 2500
0.25 -> 0.25
-2500 -> (2500)
-0.25 -> (0.25)

3
这个答案值得更多的赞扬。它在不使用条件格式的情况下正确处理了小数点。在我的特定情况下,我想显示所有小数位,因此甚至不需要修改公式。
威尔逊

1
General如果数字的小数位数过多(例如2.6532E-06而不是),则会出现科学计数法的问题0.0000026532
Dan Dascalescu

+1这对我解决一个特定的问题很有帮助,该问题需要在数据透视表的标签(其中条件格式不是选项)。格式代码$General\k完美地做到了!
丹·亨德森

17

将条件格式应用于非十进制数字。

例如,A1是目标单元格。

  1. 将A1格式设置为“ ###,###。00”。这将用于十进制数。
  2. 为非十进制数字定义条件格式。

    • 条件:像元值等于= TRUNC(A1)。
    • 格式: ###,###

结果如下:

12       =>  12
14.231   => 14.23
15.00000 => 15
17.3     => 17.30

只是数字4.001出现问题,该数字在显示时四舍五入为4.00,但不满足条件格式公式(4.001 <> 4),仍显示为“ 4”。我使用此条件公式来求解:= ROUND($ A1; 2)= TRUNC($ A1)
leokhorn

14

Excel自定义格式可以提供部分答案

Excel中数字的自定义格式以以下格式输入:

  • 正数格式;负数格式;零格式;文本格式

接近您要求的一种格式,但没有小数的数字留在小数位:

  • ,##。??;(#,##。??); 0

例:

  • 15显示为15。
  • 14.3453453显示为14.35
  • 12.1显示为12.1
  • 0显示为0

到目前为止,这是最好的答案。
KyloRen

4
但实际上并不能提供有效的解决方案,甚至无法解决。它确实具有有关自定义数字格式的有用信息。

15显示为,15。
罗杰·法尔(Roger Far)

6

我最近在Excel 2007中遇到了这个问题,最后在值单元格中使用了'TRUNC'函数:

  value  =TRUNC(B5,1)
      0      0
      5      5
    5.4    5.4
  65.43   65.4
765.432  765.4

完全按照我想要的方式工作...


3
是的,TRUNC(x,2)和ROUND(x,2)都可以完成工作(取决于您要使用哪种舍入方法)。然后,您只需要将单元格格式设置为“常规”,并且仅在需要时才显示小数位。(我投票将Droj的职务标记为答案。)
Simon East

5

这是一种使用条件格式的方法。

  1. 右键单击您的单元格,选择“设置单元格格式”
  2. 选择“自定义”
  3. 输入“ 0。####”(增加或减少#号以控制最大小数位数)
  4. 点击确定
  5. 在仍选中单元格的情况下,使用“条件格式设置”(可能是“格式”中的菜单项,或者是Home中的按钮,具体取决于您的Excel版本)
  6. 根据公式“ = MOD(H32,1)= 0”添加新规则

    编辑 -更好的公式是“ = MOD(ROUND(H32,2),1)= 0”,其中“ 2”是所需的小数位数。如果数字舍入为整数,则前一个公式保留尾随的小数点。

    用您的单元格ID替换公式中的H32,但请确保没有$符号!(没有$符号可确保您将格式复制到其他单元格中)

  7. 对于此规则的格式,请选择数字选项卡,选择“自定义”

  8. 这次输入公式“ 0”
  9. 单击“确定”足够的时间以返回到工作表(Excel版本之间有所不同)

到那里去,尽享责任!如果要将格式复制到其他单元格,请记住,您可以复制该单元格,并将“特殊粘贴”与“格式”选项一起使用。


您能否澄清这是否仅适用于某些(或更新的版本)Excel?我仍在使用2003(我怀疑其他数字也会令人尴尬),当我转到“条件格式”时,没有选择修改数字格式的选项,只能选择“字体”,“边框”和“图案”。谢谢
SSilk

我刚刚在Excel 2010上尝试了这种方法,效果很好。它不适用于早期版本的Excel(至少那是我在Excel 2010中的“兼容模式”检查器告诉我的内容)。
barfuin

2

请记住,在Reporting Services中,您也可以编写数字格式的表达式。在我的情况下,我使用了

iif(floor(Fields!numericFieldName.Value)=Fields!numericFieldName.Value,"0","0.##")

作为数字格式表达式。这将产生一个具有两种单元格格式的Excel文件,可以通过该值是否为整数来选择。


1

您/您的用户是直接在单元格中输入值,还是由公式或宏填充?

如果不是由人直接填充单元格,则可以将计算出的值存储在隐藏范围内,然后使用如下公式向用户显示带格式的文本:

=IF(ROUND(A1,2)=INT(A1),TEXT(A1,"0"),TEXT(A1,"0.0#"))

(其中“ A1”是所引用的单元格)

该公式将显示如下值:

 -------------------------
 |Original     |Formatted|
 |-------------+---------|
 |         15  |       15|
 | 14.3453453  |    14.35|
 |       12.1  |     12.1|
 |          0  |        0|
 |    -15.123  |   -15.12|
 |      1.004  |        1|
 -------------------------

注意:公式输出是文本字符串,而不是数字,因此:

  • 输出默认为左对齐。
  • 您不能在任何进一步的计算中使用输出(相反,您应该使用被引用的原始单元格)

1

将单元格格式设置为“常规”,然后在数据验证下将值限制为小数


如果您需要避免在电子表格中添加公式(可能还需要添加新列),那么弗雷德的建议可能是最好的。
西蒙东

1
这将不允许人们输入超过视觉限制的十进制数字。
barfuin

1

这不必太复杂-可以仅使用条件格式来完成。我有Excel 2010,因此这可能不适用于早期版本。

  1. 将单元格设置为常规。某些数字的小数位数可能很高。
  2. 突出显示一个单元格,然后单击“条件格式”。单击新建规则,然后单击“使用公式”。
  3. 使用公式=(B1-INT(B1))> 0(其中B1是您要格式化的单元格)
  4. 单击格式按钮,然后选择自定义。在类型字段中输入[= 0] 0;。##。
  5. 按下Enter键几次。
  6. 再次单击“条件格式”,再单击“管理规则”,然后编辑刚创建的规则。在“适用于”字段中更改范围,以覆盖要覆盖的范围。

全部做完。



0

除了卢克在上面给出的一个很好的答案以外,这里还有一个基于他的工作的变体。如果没有值,我不想在单元格中设置零。保持单元格格式不变,并使用以下公式:

=IF((A1=""), "",IF(ROUND(A1,2)=INT(A1),TEXT(A1,"0"),TEXT(A1,"0.0#")))

同样,A1是要引用的单元格。


0

使用该Round功能提供有效数字。但是,这不会更改显示的小数位数。只是用general数字格式格式化单元格。

ROUND(MyValue,Sig.figs - 1 - INT(LOG10(ABS(MyValue)))

为什么要使用所有复杂的INT(LOG ...)公式?为什么不只是将ROUND(value,2)和格式设置为General?
Simon East

0
B1=IF(ROUND(A1,2)=INT(A1),TEXT(A1,"0"),TEXT(A1,"0.##"))
C1=IF(ROUND(B1,2)=INT(B1),TEXT(B1,"0"),TEXT(B1,"0.##"))

没有更多的孤立小数点。


0

这似乎是在有小数的情况下显示小数的最简单方法-对于整数不显示小数:

=TEXT(ROUND(Base_Number,Max_Decimal_Places),"general")

或带有单元格引用:

=TEXT(ROUND(A1,2),"general")

15 = 15
9.23432234 = 9.23


欢迎使用SuperUser @lookingforsame。不过,请注意,只是要注意问题的隐藏细节。在这种情况下,操作员说输出来自SQL,如果不可能使用宏,则公式也可能不会。在回答之前,有时值得提出一个问题作为评论。很高兴见到一个新朋友,很高兴回答!
朱利安·奈特
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.