Angular由一个bug说起之八:实践中遇到的一个数据颗粒度的问题

互联网产品离不开数据处理,数据处理有一些基本的原则包括:准确性、‌完整性、一致性、保密性、及时性

  • 准确性是数据处理的首要目标,确保数据的真实性和可靠性。准确的数据是进行分析和决策的基础,因此,在数据处理过程中应采取措施确保数据的准确性,如建立数据验证机制,检查数据输入错误等。
  • 完整性指的是数据应当涵盖所有相关变量和维度,没有遗漏或缺失。如果数据不完整,可能会导致分析时的偏差和误差,因此应采取措施确保数据的完整性,如使用数据清洗工具清理数据,填补缺失值等。
  • 一致性意味着数据在不同的时间和地点应保持一致。数据的一致性对于确保分析结果的可靠性至关重要,应采取措施如使用统一的数据格式和命名规范,进行数据标准化等。
  • 保密性要求数据应根据相关法律法规和隐私政策进行保护。在处理敏感的个人信息或商业机密时,应采取措施保护数据,如限制数据访问权限,加密敏感数据等。
  • 及时性强调数据应在需要时及时提供和更新。过时的数据无法支持及时的决策和分析,因此应确保数据的及时性,如建立定时更新的数据采集和处理流程,‌及时反馈数据结果等。

我在最近的项目中就遇到了一个关于 准确性 完整性 的问题。

具体是这样:我们项目中有使用各种 Chart 来展示数据的功能,这些数据根据不同的类型和单位会为其加上前缀、后缀或者省略小数。比如:type = percent 数据后加 %type = integer 数据不能有小数位,type = currency 数据前加 $ 等等。

问题出在 percent类型 的数据,有些数据如果按百分比来计算通常不会大于 1%,比如彩票中一等奖的概率。这个时候如果要比较两个数据选出具有更优表现的数据,小数点就需要多保留一到两位。

举个例子,假如百分比保留1位小数。同样是省略后 0.1% 的两个数据,一个 0.01% 另一个 0.04%,两者的差距可能是很大的。

如下图,虽然数据很小但是表现在 Chart 上差距是很明显

我们目前的解决方案是判断数据如果 0.0% < X < 0.1% 就保留两位小数,其余情况保留一位小数。

function formatPercentRounding(data) {const value = data, result = '0.0%';// 0.0% < X < 0.1%const decimalDigits = (value > 0 && value * 1000 < 1) ? 2 : 1;if (value) {result = (Math.round(value * 1000)/10).toFixed(decimalDigits) + '%';}return result;
}

之所以使用这种比较直接的方式是因为项目中的数据类型已经确定,而且对数字的处理逻辑没有统一在一个文件中。这是大型项目经常遇到的问题,起到相同作用的代码因为一些小的差别而分别写在管理各自功能的文件里。

如果项目重构这些都是需要优化的地方。针对这篇文章提到的数字缩写的问题,可以有两种处理方案。

一种是维护一个 config.json,如:

[{chart: 'bar',numberRules: [{type: 'integer',decimalDigits: 0},{type: 'percent',decimalDigits: 2,suffix: '%'}]},{chart: 'grid',numberRules: [{type: 'currency',decimalDigits: 1,prefix: '$'},{type: 'percent',decimalDigits: 3,suffix: '%'}]},...
]

或者将代码放在一个统一的方法中处理:

const method = (chartType, data) => {let decimalDigits = 1;switch (chartType) {case 'grid':decimalDigits = 2;...break;...default:break;}return data.toFixed(decimalDigits);
}

两种方法都能解决问题,但是推荐第一种。我们可以直接把 config 文件存入数据库,这样我们就可以统一维护一个表,不管是前端来处理数据还是后端来处理都能遵守相同的规则。

以上就是我在实践中遇到的关于数据颗粒度的一个小问题以及对它的思考,谢谢

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/875580.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【数据结构】建堆算法复杂度分析及TOP-K问题

【数据结构】建堆算法复杂度分析及TOP-K问题 &#x1f525;个人主页&#xff1a;大白的编程日记 &#x1f525;专栏&#xff1a;数据结构 文章目录 【数据结构】建堆算法复杂度分析及TOP-K问题前言一.复杂度分析1.1向下建堆复杂度1.2向上建堆复杂度1.3堆排序复杂度 二.TOP-K问…

深度学习1-简介

人工智能&#xff08;AI&#xff09;旨在打造模仿智能行为的系统。它覆盖了众多方法&#xff0c;涵盖了基于逻辑、搜索和概率推理的技术。机器学习是 AI 的一个分支&#xff0c;它通过对观测数据进行数学模型拟合来学习决策制定。这个领域近年来迅猛发展&#xff0c;现在几乎&a…

​ ​【Linux】-----工具篇(多模式编辑器vim介绍及配置)

目录 认识常用三种模式 基本操作 Ⅰ、进入/打开vim Ⅱ、模式转换 Ⅲ、退出vim 命令集 Ⅰ、命令模式下 移动光标 删除文字 复制 替换 撤销 批量化注释 批量化去注释 Ⅱ、底行模式下 列出行号 跳转至指定行 查找字符 保存文件 退出vim 查看文件 分屏操作 vim的简…

论文阅读:面向自动驾驶场景的多目标点云检测算法

论文地址:面向自动驾驶场景的多目标点云检测算法 概要 点云在自动驾驶系统中的三维目标检测是关键技术之一。目前主流的基于体素的无锚框检测算法通常采用复杂的二阶段修正模块,虽然在算法性能上有所提升,但往往伴随着较大的延迟。单阶段无锚框点云检测算法简化了检测流程,…

微信小程序:vant-weapp 组件库、css 变量

vant-weapp 组件库 前往 vant-weapp 官网 npm 使用限制&#xff1a;不支持依赖于 Node.js 内置库、浏览器内置对象、C 插件 的包。 安装 vant-weapp # 通过 npm 安装 npm i vant/weapp -S --production# 通过 yarn 安装 yarn add vant/weapp --production# 安装 0.x 版本 npm i…

Mac环境报错 error: symbol(s) not found for architecture x86_64

Mac 环境Qt Creator报错 error: symbol(s) not found for architecture x86_64 错误信息 "symbol(s) not found for architecture x86_64" 通常是在编译或链接过程中出现的问题。这种错误提示通常涉及到符号未找到或者是因为编译器没有找到适当的库文件或函数定义。 …

powe bi界面认识及矩阵表基本操作 - 1

powe bi界面认识及矩阵表操作 1. 界面认识1.1 选择数据源1.2 选择相关表及点击加载1.3 表字段显示位置1.4 表属性按钮位置1.5 界面布局按钮认识 2. 矩阵表基本操作2.1 选择矩阵表2.2 创建矩阵表2.3 设置字体大小2.4 行填充&#xff1a;修改高度2.5 列宽&#xff1a;设置列的宽度…

【Python实战因果推断】55_因果推理概论5

目录 Consistency and Stable Unit Treatment Values Violations Causal Quantities of Interest Consistency and Stable Unit Treatment Values 在上述方程中&#xff0c;隐含着两个基本假设。第一个假设意味着潜在结果与处理是一致的&#xff1a;当时&#xff0c;。换句…

Vue3相比于Vue2进行了哪些更新

1、响应式原理 vue2 vue2中采用 defineProperty 来劫持整个对象&#xff0c;然后进行深度遍历所有属性&#xff0c;给每个属性添加getter和setter&#xff0c;结合发布订阅模式实现响应式。 存在的问题&#xff1a; 检测不到对象属性的添加和删除数组API方法无法监听到需要对…

Shader笔记1:基础概念

有相当一部分来自shader圣经 Base of CG Concepts Tangent, Normal and Binormal N&#xff1a;法线&#xff08;Normal, N&#xff09;垂直于表面 T&#xff1a;切线&#xff08;Tangent, T&#xff09;与U方向同向 B&#xff1a;副切线&#xff08;BiTangent, B&#xff09…

ADS 使用教程(十六)Using Sliders for Data Processing

上一篇&#xff1a;ADS 使用教程&#xff08;十五&#xff09;Multi-Dimensional Data Processing in ADS 在这一节&#xff0c;我们来谈论一下如何在进行多维数据处理时使用滑块&#xff08;Sliders&#xff09;来进行数据处理和分析。通过该方法&#xff0c;我们可以通过拖动…

python-docx 如何将列表中的值提取到段落中的run以及保存为多个文档?

&#x1f3c6;本文收录于《CSDN问答解惑-专业版》专栏&#xff0c;主要记录项目实战过程中的Bug之前因后果及提供真实有效的解决方案&#xff0c;希望能够助你一臂之力&#xff0c;帮你早日登顶实现财富自由&#x1f680;&#xff1b;同时&#xff0c;欢迎大家关注&&收…

Clion开发STM32——移植FreeModbus

STM32型号 &#xff1a;STM32H743VIT6 FreeModbus版本 &#xff1a;1.6 使用工具&#xff1a;stm32cubeMX&#xff0c;Clion 使用STM32作从机&#xff0c;模式&#xff1a;RTU 网上用keil的比较多&#xff0c;用Clion的比较少&#xff0c;如果你也用Clion&#xff0c;那么希望…

【LLM】-07-提示工程-聊天机器人

目录 1、给定身份 1.1、基础代码 1.2、聊天机器人 2、构建上下文 3、订餐机器人 3.1、窗口可视化 3.2、构建机器人 3.3、创建JSON摘要 利用会话形式&#xff0c;与具有个性化特性&#xff08;或专门为特定任务或行为设计&#xff09;的聊天机器人进行深度对话。 在 Ch…

鸿蒙仓颉语言【cryptocj 库】(介绍与SHA、MD5、HMAC摘要算法)

cryptocj 库 介绍 cryptocj 是一个安全的密码库&#xff0c;包括常用的密码算法、常用的密钥生成和签名验证。 该库是对 C 语言的 openSSL 封装的仓颉加密算法 1 提供SHA、MD5、HMAC摘要算法。 前置条件&#xff1a;NA 场景&#xff1a; OHOS&#xff0c; Linux&#xff…

经纬恒润与奇瑞汽车签订新能源项目重点供应商合作协议,共同开启合作新篇章

近日&#xff0c;2024年国家级芜湖经开区汽车零部件生态大会成功举行&#xff0c;经纬恒润受邀出席&#xff0c;与行业各伙伴齐聚经开区&#xff0c;同绘发展蓝图&#xff0c;助力经开区汽车产业高质量发展。会上&#xff0c;经纬恒润与奇瑞汽车签署合作协议&#xff0c;成为奇…

Superset二次开发之筛选器native Filters 水平布局

引言 Apache Superset作为一个功能强大的开源数据探索和可视化平台&#xff0c;提供了丰富的配置选项来定制化用户体验。其中&#xff0c;HORIZONTAL_FILTER_BAR 是一个重要的配置项&#xff0c;专注于优化和改进Superset中的筛选器条布局与交互。 什么是HORIZONTAL_FILTER_B…

免费【2024】springboot stone音乐播放器的设计与实现

博主介绍&#xff1a;✌CSDN新星计划导师、Java领域优质创作者、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java技术领域和学生毕业项目实战,高校老师/讲师/同行前辈交流✌ 技术范围&#xff1a;SpringBoot、Vue、SSM、HTML、Jsp、PHP、Nodejs、Python、爬虫、数据可视化…

【数据库】数据库设计规范文件(Word)

方便业务功能实现、业务功能扩展&#xff1b;方便设计开发、增强系统的稳定性和可维护性&#xff1b;保证数据完整性和准确性&#xff1b;提高数据存储效率&#xff0c;在满足业务需求的前提下&#xff0c;使时间开销和空间开销达到优化平衡。资料获取&#xff1a;本文本个人名…

江科大/江协科技 STM32学习笔记P9-11

文章目录 OLED1、OLED硬件main.c EXTI外部中断1、中断系统2、中断执行流程图3、STM32中断4、中断地址的作用5、EXTI6、EXTI基本结构7、AFIO复用IO口8、EXTI框图或门和与门 9、旋转编码器介绍10、硬件电路 OLED 1、OLED硬件 SCL和SDA是I2C的通信引脚&#xff0c;需要接在单片机…