发布时间: 15 Oct 2015
上次修改日期: 10 Nov 2023
问题
在调整针对数字显示的小数位数时,数字可能会错误地进行四舍五入。例如,当更改格式以显示零位小数时,显示为 40.5 的数字可能会更改为 40。
此外,当您在 STR() 函数中使用 ROUND() 时,连接到数据提取后四舍五入可能不正确。例如:STR(ROUND(SUM[Sales]),2)
解决方案
选项 1
四舍五入在 Tableau Desktop 中可以用 ROUND() 函数来完成。但是,在编写计算时必须考虑聚合,因为 Tableau 可能会解释与所应用的聚合相关的计算。 例如,如果需要四舍五入的字段是 SUM([Field]) ,并且所需计算是 ROUND([Field]),则 Tableau 会将所述计算解释为 SUM(Round([Field])。
为了修复此行为,请重写上面的计算示例,如下所示:ROUND(SUM(Field))
要查看具体的示例,请参阅附加的工作簿,其名称为 Round String.twbx。
选项 2
使用额外的字符串修饰符(如 LEFT())以及其他舍入工具(如 CEILING())来创建更精确的表示形式。
- 请注意,这样的修改可能会创建一个很长但并不是非常高效的计算字段:STR(ROUND(SUM[Sales]),2) = 319.147230000001
- 使用上述修改:LEFT(STR((CEILING(SUM([Sales])*100))/100),6) = 319.15
选项 3
查看基本数据以验证原始数字,从而确保针对数字格式正确进行四舍五入。例如,如果指定了一位小数,则原始值 40.48 将正确地四舍五入为 40.5,如果指定了零位小数,则为 40。
原因
Tableau Desktop (Tableau Prep) 根据数据库中的原始值按照“向上舍入”惯例对数字进行四舍五入。
其他信息
由于此行为并非特定于 Tableau Desktop,因此计算机如何存储数据就显得更加重要,具体而言我们将哪些值视为“小数”值就显得更加重要。整数很简单,只需加上或减去一个整数,就可以对二进制数据执行相同的操作:
- 以十进制表示:4 + 1 = 5
- 以二进制表示:100 + 1 = 101
但是,对于十进制值,如果将这些不同的值转换为二进制表示形式,有时简单的十进制表示形式不会完全转换为二进制。
例如,.1 用十进制表示很简单,但用二进制表示这个值的数字可能同时还表示 .0999999999999999 和 .1000000000000001 以及它们之间的所有数字。(请注意,每个数字都正好有 16 位小数。) 当我们在显示层中显示数字值时,可以对其进行处理,但是对数值进行数学运算或将值转换为字符串时,将显示基础值,并且此行为会根据包括数据库在内的许多因素而异。
以下是一些示例/文章,说明了如何在各种语言中使人注意到这个问题,并且此问题是计算机科学中的一个基本问题。
有关本主题和 Tableau Desktop 中可能的解决方法的讨论,请参阅以下社区论坛主题:舍入,然后转换为字符串。
有关 ROUND() 函数的更多信息,请参阅以下 Tableau 帮助文档:数字函数。