WHAT - NodeJS 基本使用

目录

  • hello world
  • http
    • http request
    • axios 版本
  • events: EventEmitter
  • error catch
  • console
  • NODE_ENV
  • buffer
  • file
    • file open
    • file path
    • file read and write
  • stream
  • os

hello world

const http = require('http');
const hostname = '127.0.0.1';
const port = 3000;
const server = http.createServer((req, res) => {console.log('server get request...');// http.IncomingMessage (in http.Server)// 获取 http 请求的正文数据// request 对象在这里是一个流 因此必须监听要处理的主体内容,并且其是按数据块处理的let data = '';req.on('data', (chunk) => {console.log(`可用的数据块: ${chunk}`);data += chunk;})req.on('end', () => {console.log('req end');})console.log('req method', req.method);console.log('req httpVersion', req.httpVersion);// http.ServerResponseres.statusCode = 200;// response.statusCode = 500// response.statusMessage = '内部服务器错误'res.setHeader('Content-Type', 'text/plain');console.log('res headers: ', res.getHeaderNames());res.end('Welcome');
})
server.listen(port, hostname, () => {console.log(`server running at http://${hostname}:${port}`);// process env// console.log('process env: ', process.env);// process argvprocess.argv.forEach((val, index) => {console.log(`${index}: ${val}`);})const args = process.argv.slice(2);// 1.// node app.js joe// console.log('user argvs: ', args[0]);// 2.// node app.js --name=joe// node app.js --name joe// const argsMap = require('minimist')(args)// console.log('user argvs: ', argsMap['name']);
})// 使用进程信号句柄来终止
// process.on('SIGTERM', () => {
//   server.close();
// })
// setTimeout(() => {
//   process.kill(process.pid, 'SIGTERM');
// }, 3000);

http

参考阅读:http://dev.nodejs.cn/learn/the-nodejs-http-module

// 1. 属性
// http.METHODS
// http.STATUS_CODES
// http.globalAgent// 2. 方法
// http.createServer()
// http.request()
// http.get()// 3. 类
// http.Agent
// http.ClientRequest
// http.Server
// http.ServerResponse
// http.IncomingMessage (http.Server vs http.ClientRequest)// 4. http.ServerResponse 与 http 消息头// 4.1
// setHeader('headername', value) 设置 HTTP 消息头的值
// getHeaderNames() 获取已设置的 HTTP 消息头名称的列表
// getHeaders() 获取已设置的 HTTP 消息头的副本
// getHeader('headername') 获取已设置的 HTTP 消息头
// removeHeader('headername') 删除已设置的 HTTP 消息头
// hasHeader('headername') 如果响应已设置该消息头,则返回 true
// headersSent() 如果消息头已被发送给客户端,则返回 true// 4. 2 writeHead vs write
// a. 在处理消息头之后,可以通过调用 response.writeHead()(该方法接受 statusCode 作为第一个参数,可选的状态消息和消息头对象)将它们发送给客户端。
// b. 若要在响应正文中发送数据给客户端,则使用 write()。 它会发送缓冲的数据到 HTTP 响应流。// 5. http.IncomingMessage
// 5.1 使用 statusCode 和 statusMessage 方法来访问状态。
// 5.2 使用 headers 方法或 rawHeaders 来访问消息头。
// 5.3 使用 method 方法来访问 HTTP 方法。
// 5.4 使用 httpVersion 方法来访问 HTTP 版本。
// 5.5 使用 url 方法来访问 URL。
// 5.6 使用 socket 方法来访问底层的 socket。

http request

const https = require('https')// get
const options = {hostname: 'nodejs.cn',port: 443,path: '/todos',method: 'GET', 
}
const req = https.request(options, res => {console.log(`状态码: ${res.statusCode}`)res.on('data', d => {process.stdout.write(d)})
})
req.on('error', error => {console.error(error)
})
req.end()// post
const data = JSON.stringify({todo: '做点事情'
})
const optionsPost = {hostname: 'nodejs.cn',port: 443,path: '/todos',method: 'POST',headers: {'Content-Type': 'application/json','Content-Length': data.length}
}
const reqPost = https.request(optionsPost, res => {// http.IncomingMessage (in http.ClientRequest)console.log(`状态码: ${res.statusCode}`)// response.read() vs response.on('data')res.on('data', d => {process.stdout.write(d)})
})
reqPost.on('error', error => {console.error(error)
})
reqPost.write(data)
reqPost.end()

axios 版本

const axios = require('axios');axios.post('http://localhost:3000', {todo: 'do something'
}).then(res => {console.log(`状态码: ${res.status}`)console.log(`Data: ${res.data}`)// console.log(res)
}).catch(error => {console.error(error)
})

events: EventEmitter

const http = require('http');
const hostname = '127.0.0.1';
const port = 3000;
const server = http.createServer((req, res) => {res.statusCode = 200;res.setHeader('Content-Type', 'text/plain');res.end('Welcome');
})
server.listen(port, hostname, () => {console.log(`server running at http://${hostname}:${port}`);const EventEmitter = require('events');const eventEmitter = new EventEmitter();// emit 触发// on 在事件被触发时执行// addListener// once// off// removeListener// removeAllListenerseventEmitter.on('start', (msg) => {console.log('start...', msg);})eventEmitter.emit('start', 'fuck')// 其他// emitter.getMaxListeners()// emitter.setMaxListeners()// emitter.prependListener()// emitter.prependOnceListener()
})// 使用进程信号句柄来终止
process.on('SIGTERM', () => {server.close();
})
setTimeout(() => {process.kill(process.pid, 'SIGTERM');
}, 3000);

error catch

const http = require('http');const hostname = '127.0.0.1';
const port = 3000;
const server = http.createServer((req, res) => {res.statusCode = 200;res.setHeader('Content-Type', 'text/plain');res.end('Welcome');
})
server.listen(port, hostname, () => {// 1.try {//代码行} catch (e) {}// 2.// 如果在程序执行过程中引发了未捕获的异常,则程序会崩溃process.on('uncaughtException', err => {console.error('有一个未捕获的错误', err)process.exit(1)})// 3.// promise// 3.1 使用 promise 可以链接不同的操作,并在最后处理错误// .then().then().catch((err) => {})const doSomething1 = () => {return new Promise((resolve, reject) => {//...try {//...// x = yconsole.log('1');throw new Error('errxx1')resolve('hello1');} catch (err) {//... 在本地处理console.log('1-1');throw new Error(err.message)}//...})}const doSomething2 = () => {return new Promise((resolve, reject) => {//...try {//...// x = yconsole.log('2');throw new Error('errxx2')resolve('hello2');} catch (err) {//... 在本地处理throw new Error(err.message)}//...})}const doSomething3 = () => {return new Promise((resolve, reject) => {//...try {//...// x = yconsole.log('3');throw new Error('errxx3')resolve('hello3');} catch (err) {//... 在本地处理throw new Error(err.message)}//...})}doSomething1().then(doSomething2).then(doSomething3).catch(err => console.error('after all then: ', err))// 3.2 为了能够在本地(而不是在调用的函数中)处理错误,则可以断开链条,在每个 then() 函数中创建函数并处理异常// doSomething1()//   .then(() => {//     return doSomething2().catch(err => {//       // 处理错误//       throw err // 打断链条//     })//   })//   .then(() => {//     return doSomething3().catch(err => {//       // 处理错误//       throw err // 打断链条//     })//   })//   .catch(err => console.error(err))// 4.// async/await// async function someFunction() {//   try {//     await someOtherFunction()//   } catch (err) {//     console.error(err.message)//   }// }console.log(`server running at http://${hostname}:${port}`);
})// 使用进程信号句柄来终止
process.on('SIGTERM', () => {server.close();
})
setTimeout(() => {process.kill(process.pid, 'SIGTERM');
}, 3000);

console

const http = require('http');
const hostname = '127.0.0.1';
const port = 3000;
const server = http.createServer((req, res) => {res.statusCode = 200;res.setHeader('Content-Type', 'text/plain');res.end('Welcome');
})
server.listen(port, hostname, () => {console.log(`server running at http://${hostname}:${port}`);// 1.// http://dev.nodejs.cn/learn/output-to-the-command-line-using-nodejsconsole.log('我的%s已经%d岁', '猫', 2);// %s 格式化变量为字符串// %d 格式化变量为数字// %i 格式化变量为其整数部分// %o 格式化变量为对象// 2. 清空console.clear();// 3. 打印堆栈踪迹const function2 = () => console.trace()const function1 = () => function2()function1()// 4. 计算耗时const doSomething = () => console.log('测试')const measureDoingSomething = () => {console.time('doSomething()')doSomething()console.timeEnd('doSomething()')}measureDoingSomething()// 5. stdout vs stderr// console.log 在控制台打印消息就是所谓的标准输出// console.error 会打印到stderr流 不会出现在控制台 而是出现在错误日志中// 6. 着色// const chalk = require('chalk')// console.log(chalk.yellow('你好'))// 7. 进度条// const ProgressBar = require('progress')// const bar = new ProgressBar(':bar', { total: 10 })// const timer = setInterval(() => {//   bar.tick()//   if (bar.complete) {//     clearInterval(timer)//   }// }, 100)// 8. 对象const obj = {name: '1',age: 2}console.log(obj);// 在 Node.js 中会获得对象的字符串表示形式// 但是在经过两个级别的嵌套后,Node.js 会放弃并打印 [Object] 作为占位符const objHigh = {name: 'joe',age: 35,person1: {name: 'Tony',age: 50,person2: {name: 'Albert',age: 21,person3: {name: 'Peter',age: 23}}}}console.log(objHigh)// 推荐 (2 为缩进)console.log(JSON.stringify(objHigh, null, 2))
})// 使用进程信号句柄来终止
process.on('SIGTERM', () => {server.close();
})
setTimeout(() => {process.kill(process.pid, 'SIGTERM');
}, 3000);

NODE_ENV

const http = require('http');const hostname = '127.0.0.1';
const port = 3000;
const server = http.createServer((req, res) => {res.statusCode = 200;res.setHeader('Content-Type', 'text/plain');res.end('Welcome');
})
server.listen(port, hostname, () => {// NODE_ENV=production node app.jsconsole.log('env', process.env.NODE_ENV);if (process.env.NODE_ENV === "development") {//...console.log('111');}if (process.env.NODE_ENV === "production") {//...console.log('222');}if(['production', 'staging'].indexOf(process.env.NODE_ENV) >= 0) {//...console.log('333');}console.log(`server running at http://${hostname}:${port}`);
})// 使用进程信号句柄来终止
process.on('SIGTERM', () => {server.close();
})
setTimeout(() => {process.kill(process.pid, 'SIGTERM');
}, 3000);

buffer

// http://dev.nodejs.cn/learn/nodejs-buffersconst http = require('http');
const fs = require('fs');
const path = require('path');const hostname = '127.0.0.1';
const port = 3000;
const server = http.createServer((req, res) => {res.statusCode = 200;res.setHeader('Content-Type', 'text/plain');res.end('Welcome');
})
server.listen(port, hostname, () => {// pathconst fsPath = path.resolve(__dirname, './package.json');console.log(`server running at http://${hostname}:${port}`);
})// 使用进程信号句柄来终止
process.on('SIGTERM', () => {server.close();
})
setTimeout(() => {process.kill(process.pid, 'SIGTERM');
}, 3000);

file

file open

const http = require('http');
const fs = require('fs');
const path = require('path');const hostname = '127.0.0.1';
const port = 3000;
const server = http.createServer((req, res) => {res.statusCode = 200;res.setHeader('Content-Type', 'text/plain');res.end('Welcome');
})
server.listen(port, hostname, () => {const fsPath = path.resolve(__dirname, './package.json');console.log('fs path', fsPath);// fs.openSync vs fs.openfs.open(fsPath, 'r', (err, fd) => {console.log('文件描述符:', fd);})// r 打开文件用于读取// r+ 打开文件用于读写// w+ 打开文件用于读写,将流定位到文件的开头。如果文件不存在则创建文件// a 打开文件用于写入,将流定位到文件的末尾。如果文件不存在则创建文件// a+ 打开文件用于读写,将流定位到文件的末尾。如果文件不存在则创建文件// fs.statSync vs fs.statfs.stat(fsPath, 'r', (err, stats) => {// console.log('文件属性:', stats);console.log('isFile: ', stats.isFile());console.log('isDirectory: ', stats.isDirectory());console.log('isSymbolicLink: ', stats.isSymbolicLink());console.log('size: ', stats.size);})console.log(`server running at http://${hostname}:${port}`);
})// 使用进程信号句柄来终止
process.on('SIGTERM', () => {server.close();
})
setTimeout(() => {process.kill(process.pid, 'SIGTERM');
}, 3000);

file path

const http = require('http');
const fs = require('fs');
const path = require('path');const hostname = '127.0.0.1';
const port = 3000;
const server = http.createServer((req, res) => {res.statusCode = 200;res.setHeader('Content-Type', 'text/plain');res.end('Welcome');
})
server.listen(port, hostname, () => {// pathconst fsPath = path.resolve(__dirname, './package.json');console.log('fs path: ', fsPath);console.log('dirname: ', path.dirname(fsPath));console.log('basename: ', path.basename(fsPath));console.log('extname: ', path.extname(fsPath));console.log('basename without extname: ', path.basename(fsPath, path.extname(fsPath)));// path.join vs path.resolve// join 连接路径的两个或多个片段const name = 'joe'console.log(path.join('/', 'users', name, 'notes.txt')); // resolve 获得相对路径的绝对路径计算console.log(path.resolve('package.json'));console.log(path.resolve('joe.txt'));console.log(path.resolve('tmp', 'joe.txt'));console.log(path.resolve('/tmp', 'joe.txt'));// path.normalizeconsole.log(path.normalize('/users/joe/..//test.txt'));// 其他// path.isAbsolute()// path.parse()// path.relative()console.log(`server running at http://${hostname}:${port}`);
})// 使用进程信号句柄来终止
process.on('SIGTERM', () => {server.close();
})
setTimeout(() => {process.kill(process.pid, 'SIGTERM');
}, 3000);

file read and write

const http = require('http');
const fs = require('fs');
const path = require('path');const hostname = '127.0.0.1';
const port = 3000;
const server = http.createServer((req, res) => {res.statusCode = 200;res.setHeader('Content-Type', 'text/plain');res.end('Welcome');
})
server.listen(port, hostname, () => {const fsPath = path.resolve(__dirname, './package.json');console.log('fs path', fsPath);// 1.读// fs.readFile vs fs.readFileSyncfs.readFile(fsPath, 'utf8', (err, data) => {if (err) {console.error(err)return}console.log(data)})// 注意 fs.readFile() 和 fs.readFileSync() 都会在返回数据之前将文件的全部内容读取到内存中。// 这意味着大文件会对内存的消耗和程序执行的速度产生重大的影响。// 在这种情况下,更好的选择是使用流来读取文件的内容。// 2.写// 同理// fs.writeFile vs fs.writeFileSync// fs.appendFile vs fs.appendFileSync// 注意 所有这些方法都是在将全部内容写入文件之后才会将控制权返回给程序(在异步的版本中,这意味着执行回调)。// 在这种情况下,更好的选择是使用流写入文件的内容。// 3.流// streamconsole.log(`server running at http://${hostname}:${port}`);
})// 使用进程信号句柄来终止
process.on('SIGTERM', () => {server.close();
})
setTimeout(() => {process.kill(process.pid, 'SIGTERM');
}, 3000);

stream

// http://dev.nodejs.cn/learn/nodejs-streams
// 1. 读/写文件
// 2. 网络通信
// 3. 任何类型的端到端的信息交换const http = require('http');
const fs = require('fs');
const path = require('path');const hostname = '127.0.0.1';
const port = 3000;
const server = http.createServer((req, res) => {// fs.createReadStream() 创建文件的可读流const fsPath = path.resolve(__dirname, './package.json');console.log('path: ', fsPath);const stream = fs.createReadStream(fsPath);// console.log(stream);// stream.pipe(res);res.statusCode = 200;res.setHeader('Content-Type', 'text/plain');res.end('Welcome');
})
server.listen(port, hostname, () => {console.log(`server running at http://${hostname}:${port}`);
})// 使用进程信号句柄来终止
// process.on('SIGTERM', () => {
//   server.close();
// })
// setTimeout(() => {
//   process.kill(process.pid, 'SIGTERM');
// }, 3000);

os

const http = require('http');const os = require('os')const hostname = '127.0.0.1';
const port = 3000;
const server = http.createServer((req, res) => {res.statusCode = 200;res.setHeader('Content-Type', 'text/plain');res.end('Welcome');
})
server.listen(port, hostname, () => {console.log(`server running at http://${hostname}:${port}`);// console.log(os.EOL);// console.log(os.constants.signals);// console.log(os.constants.errno);console.log(os.arch());// console.log(os.cpus());// console.log(os.endianness());// console.log(os.freemem());// console.log(os.homedir());console.log(os.hostname());// console.log(os.loadavg());// console.log(os.networkInterfaces());console.log(os.platform());console.log(os.release());// console.log(os.tmpdir());// console.log(os.totalmem());console.log(os.type());console.log(os.uptime());console.log(os.userInfo());})// 使用进程信号句柄来终止
process.on('SIGTERM', () => {server.close();
})
setTimeout(() => {process.kill(process.pid, 'SIGTERM');
}, 3000);

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

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

相关文章

沙普利值是什么,和沙普利值相结合的更好办法

目录 沙普利值是什么,应用场景有什么,举例说明 在云计算资源分配中举例 场景设定 用户需求和资源使用情况 沙普利值在资源分配中的应用(按需定价,) 归纳 和沙普利值相结合的更好办法 AHP法(层次分析法) ANP法(网络层次分析法) 模糊数学 沙普利值计算举例 沙…

一文讲清:生产报工系统的功能、报价以及如何选择

最近这几年,企业越来越注重生产的速度和成本,尤其是“性价比”,生产报工系统已经变成了制造业里不可或缺的一部分。不过,市场上生产报工系统的选择太多,价格也都不一样,这就给很多企业出了个难题&#xff1…

【笔记】【Git】多个dev分支合并到master分支的文件冲突

问题描述 多个dev分支在同步开发,同时发起代码评审,但合入master的时候存在先后顺序,那么后面同文件的操作则会提示“合并有文件冲突”,导致代码无法入库,只能重新提交。 在个人分支中如何解决与master分支差异&#…

最短路问题详解

一、引言 最短路问题(Shortest Path Problem)是计算机科学和运筹学中的一类重要问题。它通常用于解决网络中两个节点之间的最短距离或最低成本路径问题。这类问题在交通规划、通信网络、地图导航等领域有着广泛的应用。本文将详细介绍最短路问题的基本概…

指针的深入理解(3)(包括数组名的理解、一维数组传参的本质以及指针数组的相关知识及使用)

文章目录 1 数组名的理解2 使用指针访问数组3 一维数组传参的本质4 指针数组5 指针数组的使用 1 数组名的理解 当我们运行以下代码&#xff1a; #include <stdio.h> int main() {int arr[10] { 0 };printf("%p\n", &arr[0]);printf("%p\n", a…

护网设备的使用

设备概念 IPS IPS代表入侵防御系统&#xff08;Intrusion Prevention System&#xff09;&#xff0c;它不仅可以检测入侵行为&#xff0c;还可以主动采取措施进行防御。 IDS IDS代表入侵检测系统&#xff08;Intrusion Detection System&#xff09;&#xff0c;它通过监视网…

团体标准的发布主体的区别

团体标准的发布机构 团体标准是依法成立的社会团体&#xff0c;如学会、协会、商会、联合会、产业技术联盟等&#xff0c;为满足市场和创新需求&#xff0c;协调相关市场主体共同制定的标准。这些社会团体一般是民间组织&#xff0c;不属于政府的管理机构&#xff0c;而是政府…

前端开发中的热更新原理

一、什么是热更新 热更新&#xff08;Hot Module Replacement&#xff0c;HMR&#xff09;是一种在前端开发中极为重要的技术。它允许开发者在不重新加载整个页面的情况下&#xff0c;实时更新应用程序中的某些模块。简单来说&#xff0c;热更新能让你在开发过程中即时看到代码…

HCIA6以太网基础基于MAC划分VLAN

&#xff08;简写的命令可以敲Tab按键补全剩余&#xff09; 1.组网需求 场景&#xff1a;公司的网络中&#xff0c;管理者将同一部门的员工划分到VLAN10。要求只有本部门员工的PC接入才能互访&#xff0c;其他PC接入交换机属于其他VLAN&#xff08;666&#xff09;。可以配置…

遇到Windows无法启动时不要担心,这里有解决办法

序言 如果有一天你打开电脑,Windows拒绝启动,你该怎么办?其实“Windows无法启动”是一种常见症状,原因多种多样,因此你需要进行一些故障排除。 现代版本的Windows更善于从这种情况中自动恢复,而Windows XP遇到此问题时可能会停止在运行的地方,现代版本的Windows将尝试…

自然语言处理(NLP)教学解决方案

前言 自然语言处理&#xff08;NLP&#xff09;是计算机科学、人工智能以及语言学的交叉学科&#xff0c;它致力于使计算机能够理解、解释并生成人类自然语言&#xff0c;从而实现人机间有效沟通。近年来&#xff0c;随着深度学习技术的突破&#xff0c;自然语言处理技术在机器…

【复旦邱锡鹏教授《神经网络与深度学习公开课》笔记】神经元和人工神经网络

神经元 生物神经元&#xff1a; 平时处于抑制状态&#xff0c;当接受信息量达到一定程度后进入兴奋状态。 人工神经元&#xff1a; 一个人工神经元大致有两个步骤&#xff1a; 一是收集信息&#xff0c;如上图中 x 1 , ⋯ , x d x_1,\cdots,x_d x1​,⋯,xd​表示神经元可…

SinoDB导入导出工具汇总

在进行数据迁移、数据库表备份、表重建以及批量数据加载时&#xff0c;我们经常希望数据处理过程能够更快点。本文是SinoDB导入导出工具的汇总&#xff0c;大家可以根据不同场景选择合适的SinoDB导入导出工具。 1. 各工具特点 通常利用dbschema工具导出数据库结构&#xff0c;…

vivado HW_SIO_PLL

HW_SIO_PLL 描述 对于具有千兆位收发器&#xff08;GT&#xff09;的Xilinx FPGA设备&#xff0c;每个串行收发器通道 具有称为信道PLL&#xff08;CPLL&#xff09;的环形锁相环&#xff08;PLL&#xff09;。对于Xilinx UltraScale和7 系列FPGA&#xff0c;GTX每四路有一个额…

在 Ubuntu 上取消登录密码和锁屏功能的简易指南

你可以使用终端命令来直接设置取消登录密码和锁屏功能。以下是具体步骤&#xff1a; 取消登录密码 打开终端。编辑 /etc/gdm3/custom.conf 文件&#xff1a;sudo nano /etc/gdm3/custom.conf在 [daemon] 部分下&#xff0c;添加或修改以下行&#xff1a;AutomaticLoginEnable…

【odoo】详细解读odoo模块__manifest__文件

概要 odoo中的__manifest__.py文件&#xff0c;是 Odoo 模块的描述文件&#xff0c;包含该模块的元数据。这个文件使用 Python 字典格式&#xff0c;定义了模块的基本信息和依赖关系。 详细说明 {name: Demo Name, #…

NVMe中的Copy命令你知道吗?

前段时间做过copy的相关工作&#xff0c;今天抽出时间来总结一下&#xff0c;共勉 什么是Copy命令 顾名思义&#xff0c;简单理解就是复制&#xff0c;我们可以看看官方文档是如何定义的&#xff1a; The Copy command is used by the host to copy data from one or more so…

Shell脚本 if语句

条件测试&#xff1a; $? 返回码 判断命令或者脚本是否执行成功&#xff08;最近的一条&#xff09; 0 true 为真就是成功 成立 非0 false 失败或者异常 test命令 可以进行条件测试 然后根据的是返回值来判断条件是否成立。 -e 测试目录或者文件是否存在 exist -d 测试…

JS 有几种遍历数组的方法

JS 有几种遍历数组的方法&#xff0c;forEach 和 map 有什么区别&#xff1f; for forEach map filter for…of&#xff08;缺点&#xff1a;没有索引&#xff09; find&#xff08;遍历数组&#xff0c;找到第一个符合条件的项&#xff0c;并返回该项&#xff1b;不会继续…

如何在Excel中快速找出含有多位小数的数字

在日常工作中&#xff0c;使用Excel处理数据是一项常见任务。然而&#xff0c;有时我们会遇到一些看似简单&#xff0c;却令人头疼的问题。例如&#xff0c;当我们在一个包含大量数据的列中发现某个数字的小数点位数过多时&#xff0c;如何快速找到这个数字&#xff1f;本文将介…