数字与数值精度

Prev Next

:::(Info)Following Release 306, Tulip is changing the way numbers are stored in Tables and Completion Records to support capturing, storing, and displaying trailing zeros.
:::

“Number”数据类型为实数(例如 53、700、506.2、7.645)。 Tulip 的数值精度允许数字包含尾随零(例如 1.90、7.300、36.850、419.38910)。

数值精度的详细说明

“Number”输入数据保留尾零通过“Number”Inputs输入的运算符数据,在Tulip生态系统中的存储和显示过程中均保留尾零——小数点后最多可保留20位。 超过 20 位的输入值将四舍五入至最接近的第 20 位。表数据存储在一种名为Postgres Decimal的新精确数据类型中,而非浮点数。

表记录数据会显示小数点后所有位数。表会显示小数点后所有位数,并在列宽处显示省略号。此前用户体验的限制仅在网格视图中显示前 3 位。要查看小数点后的所有位数,请点击表记录。

数字输入和表达式可控制小数位数以满足需求。应用构建者可通过以下方式指定并强制执行输入和计算中的小数位数:* 数字输入验证规则,用于设置确切的小数位数。

Number input validation for decimals

  • 用于管理外部输入(即连接器、设备、机器、自定义控件)的小数位数并执行数学运算的表达式。这些表达式包括 ROUND() 和 GETDECIMALPLACES()。
  • 新表达式 TOPLAINTEXT() 可输出具有完整精度的十进制数。

有关这些表达式的更多信息,请参阅下文“用于管理精度的表达式”一节。

限制与越界行为

最大值: JS MAX SAFE INT* 这是 JavaScript 中数值数据的标准最大值 * Tulip Tables API 的越界处理:大于此值的输入数据将引发错误且不会被存储。

**小数点后最大位数:**20* 这比浮点数的位数更多(此前 Tulip 支持 15 位),并涵盖了所有已知用例。* Tulip Tables API 的越界处理:小数点后位数超过 20 位的输入数据将被四舍五入至第 20 位

数值精度与其他 Tulip 功能如何配合使用?

仅带尾随零的输入数据适用于应用中的数字输入字段。Tulip 中的其他数据流对数值精度的处理方式不同:

外部数据

通过连接器、机器、设备和自定义小部件传入的数据仍以字符串或浮点数形式发送,具体取决于数据源提供的数据类型。数值数据在存储到 Tulip 表和补全记录时,会转换为 Postgres 十进制数。

自动化

Automation 将在 2025 年晚些时候支持尾随零。目前,执行计算的自动化流程不会存储尾随零。

管理精度的表达式

应用程序构建者可通过以下表达式在将数字存储到 Tulip 时管理位数。

ROUND()

使用 ROUND() 指定所需的小数位数,并在存储值之前添加尾零。:::(Internal) (Private notes)
insert screenshot of example expression]
:::

应用开发者可以在进行数学计算(包括求平均值和求和)时,使用以下表达式来管理位数。

GETDECIMALPLACES() 和 ROUND()

使用 GETDECIMALPLACES() 和/或 ROUND() 来管理计算结果的小数位数。

TOPLAINTEXT()

使用 TOPLAINTEXT() 代替 TOTEXT(),以查看数值精确的小数位数,包括尾随的零。这是因为 TOTEXT() 保留了向后兼容的实现方式,会将精确的小数显示为 JavaScript 数字(即浮点数),其精度最多为 16 位。

技术细节

  • 作为此行为的一部分,Tulip 表格和补全功能已从“浮点数”迁移至精确的 Postgres Decimals,后者配置为最多存储 20 位小数。
  • 来自所有来源(即应用程序、Tulip 表 API、连接器等)的传入数值数据均以 Postgres Decimals 格式存储在 Tulip 表中,并在存储时四舍五入至最多 20 位。

历史数据

在 306 版发布之前收集的数据已完全保留,数值保持不变。任何新传入的数据都会被四舍五入至小数点后 20 位。

细微变更

由于十进制数与浮点数之间的差异,在“数值精度”功能推出后,应用程序中数值的处理方式存在一些边界情况的变化和注意事项:

  1. 表达式:精确小数中不存在 JavaScript 的 NaN 和 Infinity—— 因此,在出现数学错误的情况(例如对负数开平方或除以 0)时,表达式现在会触发错误。a. 这意味着应用开发者可能需要更新任何涉及 JavaScript NaN 和 Infinity 的特殊情况逻辑。这些并非受支持的接口,我们不建议在应用中利用它们来处理数学边界情况。
  2. 触发器:"显示消息" 现使用引号包裹数字a。这意味着您现在可以在 "显示消息" 中显示尾随的零。
  3. 表格:CSV 导出现在显示完整数字(大于 1e6)——此前,CSV 对于大数(大于 1e6)使用指数表示法。a. 这意味着,如果管理员此前编写了处理指数形式的特殊脚本,现在可能需要更新这些脚本以移除相关处理逻辑。
  4. 表达式:TOTEXT 与数字表示法——如果您需要在文本表示中保留尾随零,请使用新表达式 TOPLAINTEXT(),该表达式会将数字用引号包裹以保留尾随零。a. 表达式:TOTEXT() 不会将数字用引号包裹,因此无法保留尾随零。 请改用新的 TOPLAINTEXT() 来查看带尾随零且用引号包裹的完整数字。b. 我们引入 TOPLAINTEXT() 作为新表达式,以保持与可能曾使用 TOTEXT() 表达式的应用程序的向后兼容性。

如果您对数字精度的处理有任何疑问,请联系您的 Tulip 客户成功经理,或在社区讨论帖中发帖。

数字格式和语言

数字格式因国家/地区而异,特别是分隔符的用法。 例如,某些国家/地区(美国、墨西哥、中国)使用点(.)作为小数点,逗号(,)作为千位分隔符;而其他国家/地区(如欧洲)则使用逗号(,)作为小数点。

在 Tulip 中,这些数字格式在以下场景中至关重要:1. 向 Tulip 用户显示数字时,格式可确保用户正确理解数值。2. 解析用户输入的数值时,格式可确保将正确的数值记录到 Tulip 数据中。

数字格式由当前用户在个人设置中定义的语言决定。如果用户未选择特定语言,Tulip 将根据浏览器设置推断语言。

了解如何设置语言偏好。

Only user-level language settings

Note that there is no default instance-level or workspace-level language setting.

截至 r360 版本的默认数字格式

在同一语言内,不同地理区域使用的数字格式可能存在差异。为理解此行为,请注意您所选语言的以下特点:

以下语言默认使用逗号 ( , ) 作为小数分隔符:* 保加利亚语* 捷克语* 丹麦语* 荷兰语* 爱沙尼亚语* 芬兰语* 法语* 德语* 希腊语* 匈牙利语* 印尼语* 意大利语* 拉脱维亚语* 立陶宛语* 挪威语* 波兰语* 葡萄牙语* 罗马尼亚语* 俄语* 斯洛伐克语* 斯洛文尼亚语* 西班牙语* 瑞典语* 土耳其语* 乌克兰语* 越南语

若要覆盖此行为,请联系您的系统管理员或发送邮件至Tulip Support 。