let a = '266748207301.75' console.log( Number(a) / 10000000000000000.toFixed(2))为什么报错

时间: 2024-09-14 08:16:02 浏览: 32
在JavaScript中,使用 `Number` 对象的 `toFixed()` 方法可以将数字转换为字符串,并保留指定位数的小数。然而,当你尝试对数字进行运算后再使用 `toFixed()` 方法时,会遇到问题。这是因为在JavaScript中,`toFixed()` 是字符串的方法,而不是数字的方法。 在你的代码中,`Number(a) / 10000000000000000.toFixed(2)` 这段代码中,`Number(a)` 首先将字符串 `'266748207301.75'` 转换成数字,然后除以 `10000000000000000`,结果是一个非常大的数字。这个数字在被转换成字符串之前,你尝试调用 `toFixed(2)` 方法。由于数字本身不能直接使用 `toFixed()`,JavaScript引擎会尝试将数字转换为字符串后再调用 `toFixed()` 方法,但这个转换发生在执行除法之后,因此会产生错误。 要修正这个问题,你需要先执行除法,然后将结果转换成字符串,最后调用 `toFixed()` 方法。例如: ```javascript let a = '266748207301.75'; console.log((Number(a) / 10000000000000000).toString().toFixed(2)); ``` 这样,数字会先被转换成字符串,然后 `toFixed(2)` 方法被成功调用,并返回一个带有两位小数的字符串。
相关问题

<template> <div class="hello"> <h1>子任务五:用折柱展示省份平均消费额和地区平均消费额</h1> <div id="chart" style="height: 800px;width: 1600px;"></div> </div> </template> <script> import { onMounted } from 'vue'; import * as echarts from "../src/assets/echarts.min"; import axios from 'axios'; export default{ setup(){ onMounted(()=>{ axios({ method:"post", url:'/api/dataVisualization/selectOrderInfo', data:{ "startTime":"2020-01-01 00:00:00", "endTime":"2020-12-30 00:00:00" } }).then((res)=>{ let da = res.data.data; console.log(da) var nationMap = new Map(); var aderrsMap = new Map(); da.forEach((e)=>{ if(!nationMap.has(e.provinceName)){ nationMap.set(e.provinceName,Number(e.finalTotalAmount/12)) }else{ let sum1 = nationMap.get(e.provinceName) +Number(e.finalTotalAmount/12); nationMap.set(e.provinceName,sum1); } }); da.forEach((e)=>{ if(!aderrsMap.has(e.regionName)){ aderrsMap.set(e.regionName,Number(e.finalTotalAmount/12)) }else{ let sum1 = aderrsMap.get(e.regionName) + Number(e.finalTotalAmount/12); aderrsMap.set(e.regionName,sum1); } }); let arr1 = Array.from(aderrsMap); let sortedArr1 = arr1.sort(function(c,d){ return d[1] - c[1]; }); let arr = Array.from(nationMap); let sortedArr = arr.sort(function(a,b){ return b[1] - a[1]; }); var top_name = []; var top_data = []; sortedArr.slice(0,5).forEach((res)=>{ top_name.push(res[0]); top_data.push(parseFloat(res[1]).toFixed(2)); }); var avg_name = []; var avg_data = []; sortedArr1.slice(0,5).forEach((res)=>{ avg_name.push(res[0]); avg_data.push(parseFloat(res[1]).toFixed(2)); }); var chartDom = document.getElementById("chart"); var myChart = echarts.init(chartDom); const option={ xAxis:[{ type:"category", data:top_name, name:"省份", },{ data:avg_name, name:"地区", } ], yAxis:{ type:"value", name:"平均消费额", }, series:[{ type:"bar", data:top_data, },{ type:"line", data:avg_data, } ] }; console.log(top_name); console.log(top_data); console.log(avg_name); console.log(avg_data); option && myChart.setOption(option,true); }).catch((err)=>{ console.log(err); }) }) } } </script>对每行代码的作用做出详细的注释,并且表明这段代码为什么要这么写

当对每行代码进行详细注释时,请注意以下内容: ```javascript <template> <div class="hello"> <h1>子任务五:用折柱展示省份平均消费额和地区平均消费额</h1> <div id="chart" style="height: 800px;width: 1600px;"></div> </div> </template> <script> import { onMounted } from 'vue'; import * as echarts from "../src/assets/echarts.min"; import axios from 'axios'; export default { setup() { onMounted(() => { axios({ method: "post", url: '/api/dataVisualization/selectOrderInfo', data: { "startTime": "2020-01-01 00:00:00", "endTime": "2020-12-30 00:00:00" } }).then((res) => { let da = res.data.data; // 获取请求返回的数据 console.log(da); // 创建一个 Map 对象用于存储各省份的消费额 var nationMap = new Map(); // 创建一个 Map 对象用于存储各地区的消费额 var aderrsMap = new Map(); // 遍历数据,计算各省份的平均消费额并存储到 nationMap 中 da.forEach((e) => { if (!nationMap.has(e.provinceName)) { nationMap.set(e.provinceName, Number(e.finalTotalAmount / 12)); } else { let sum1 = nationMap.get(e.provinceName) + Number(e.finalTotalAmount / 12); nationMap.set(e.provinceName, sum1); } }); // 遍历数据,计算各地区的平均消费额并存储到 aderrsMap 中 da.forEach((e) => { if (!aderrsMap.has(e.regionName)) { aderrsMap.set(e.regionName, Number(e.finalTotalAmount / 12)); } else { let sum1 = aderrsMap.get(e.regionName) + Number(e.finalTotalAmount / 12); aderrsMap.set(e.regionName, sum1); } }); // 将 aderrsMap 转换为数组并按照消费额降序排序 let arr1 = Array.from(aderrsMap); let sortedArr1 = arr1.sort(function(c, d) { return d[1] - c[1]; }); // 将 nationMap 转换为数组并按照消费额降序排序 let arr = Array.from(nationMap); let sortedArr = arr.sort(function(a, b) { return b[1] - a[1]; }); // 获取消费额前五名的省份名称和对应的平均消费额 var top_name = []; var top_data = []; sortedArr.slice(0, 5).forEach((res) => { top_name.push(res[0]); top_data.push(parseFloat(res[1]).toFixed(2)); }); // 获取消费额前五名的地区名称和对应的平均消费额 var avg_name = []; var avg_data = []; sortedArr1.slice(0, 5).forEach((res) => { avg_name.push(res[0]); avg_data.push(parseFloat(res[1]).toFixed(2)); }); var chartDom = document.getElementById("chart"); var myChart = echarts.init(chartDom); // 配置图表的 x 轴、y 轴和系列数据 const option = { xAxis: [{ type: "category", data: top_name, name: "省份", }, { data: avg_name, name: "地区", } ], yAxis: { type: "value", name: "平均消费额", }, series: [{ type: "bar", data: top_data, }, { type: "line", data: avg_data, } ] }; console.log(top_name); console.log(top_data); console.log(avg_name); console.log(avg_data); // 渲染图表 option && myChart.setOption(option, true); }).catch((err) => { console.log(err); }) }) } } </script> ``` 在上面的代码注释中,我对每行代码进行了详细的描述,并指明了它们的作用和原因。如果你对其中任何一行代码有疑问,请随时提问!

优化带码:<Item label={val.i_title} name={val.name} rules={[ ({ getFieldValue }) => ({ validator (_, value) { let { companyList, personList } = form.current.getFieldsValue(['companyList', 'personList']) let totalPercent = 0; //总比例 let percent = 0; //比例 let arr = [...companyList, ...personList].filter((c) => c.percent) let _allempty = true for (let i = 0; i < arr.length; i++) { for(let key in arr[i]) { if (key !== 'cardNoType' && arr[i][key]) { _allempty = false break } } if (!_allempty) { break } } if (_allempty) { return Promise.reject(new Error('请至少填写一条股东信息')) } arr.forEach((c) => { percent = c.percent ? parseFloat(c.percent) : 0 totalPercent += percent }) if (toFixed(totalPercent) * 1 !== 100) { return Promise.reject(new Error('股权比例精确到小数点后两位且总和等于100')); } console.log(companyList, personList); return Promise.resolve(); }, }), ]} labelAlign={val.labelAlign} > <ShareholdersInformation form={form} {...val.attrs}/> </Item>

这段代码中存在一些可以优化的地方: 1. 在循环中使用了一个变量 `_allempty` 来判断是否所有股东信息都为空,但是循环过程中没有对其进行更新,导致在第一次循环中就确定了其值,后面的循环就不会再更新。可以将其移动到循环内部,每次判断时重新赋值。 2. 在计算股权比例时,可以使用 reduce 方法简化计算过程。 3. 在计算股权比例时,使用了 `toFixed` 方法将结果转换成字符串,然后再乘以 1 转换回数字类型,这个过程可以使用 `Number` 函数代替。 优化后的代码如下: ``` <Item label={val.i_title} name={val.name} rules={[ { validator(_, value) { const { companyList, personList } = form.current.getFieldsValue([ 'companyList', 'personList', ]); let totalPercent = 0; //总比例 let arr = [...companyList, ...personList].filter((c) => c.percent); let allempty = true; for (let i = 0; i < arr.length; i++) { let empty = true; for (let key in arr[i]) { if (key !== 'cardNoType' && arr[i][key]) { empty = false; allempty = false; break; } } if (!empty) { break; } } if (allempty) { return Promise.reject(new Error('请至少填写一条股东信息')); } totalPercent = arr.reduce((prev, cur) => prev + Number(cur.percent), 0); if (totalPercent.toFixed(2) * 1 !== 100) { return Promise.reject(new Error('股权比例精确到小数点后两位且总和等于100')); } console.log(companyList, personList); return Promise.resolve(); }, }, ]} labelAlign={val.labelAlign} > <ShareholdersInformation form={form} {...val.attrs} /> </Item> ```
阅读全文

相关推荐

<template> 子任务五:用折柱展示省份平均消费额和地区平均消费额 </template> <script> import { onMounted } from 'vue'; import * as echarts from "../src/assets/echarts.min"; import axios from 'axios'; export default{ setup(){ onMounted(()=>{ axios({ method:"post", url:'/api/dataVisualization/selectOrderInfo', data:{ "startTime":"2020-01-01 00:00:00", "endTime":"2020-12-30 00:00:00" } }).then((res)=>{ let da = res.data.data; console.log(da) var nationMap = new Map(); var aderrsMap = new Map(); da.forEach((e)=>{ if(!nationMap.has(e.provinceName)){ nationMap.set(e.provinceName,Number(e.finalTotalAmount/12)) }else{ let sum1 = nationMap.get(e.provinceName) +Number(e.finalTotalAmount/12); nationMap.set(e.provinceName,sum1); } }); da.forEach((e)=>{ if(!aderrsMap.has(e.regionName)){ aderrsMap.set(e.regionName,Number(e.finalTotalAmount/12)) }else{ let sum1 = aderrsMap.get(e.regionName) + Number(e.finalTotalAmount/12); aderrsMap.set(e.regionName,sum1); } }); let arr1 = Array.from(aderrsMap); let sortedArr1 = arr1.sort(function(c,d){ return d[1] - c[1]; }); let arr = Array.from(nationMap); let sortedArr = arr.sort(function(a,b){ return b[1] - a[1]; }); var top_name = []; var top_data = []; sortedArr.slice(0,5).forEach((res)=>{ top_name.push(res[0]); top_data.push(parseFloat(res[1]).toFixed(2)); }); var avg_name = []; var avg_data = []; sortedArr1.slice(0,5).forEach((res)=>{ avg_name.push(res[0]); avg_data.push(parseFloat(res[1]).toFixed(2)); }); var chartDom = document.getElementById("chart"); var myChart = echarts.init(chartDom); const option={ xAxis:[{ type:"category", data:top_name, name:"省份", },{ data:avg_name, name:"地区", } ], yAxis:{ type:"value", name:"平均消费额", }, series:[{ type:"bar", data:top_data, },{ type:"line", data:avg_data, } ] }; console.log(top_name); console.log(top_data); console.log(avg_name); console.log(avg_data); option && myChart.setOption(option,true); }).catch((err)=>{ console.log(err); }) }) } } </script> 有需要修改的地方吗

chooseGood(event){ console.log(event.currentTarget.dataset.index) let index = event.currentTarget.dataset.index //做非的操作,点击一下就是未选择状态 this.data.cartList[index].choose = !this.data.cartList[index].choose //做数据绑定 this.setData({ cartList: this.data.cartList }) //更新全局里和缓存里的的购物车列表数据 app.globalData.cartList = this.data.cartList wx.setStorageSync('cartList', this.data.cartList) //计算合计 this.total() }, //在购物车点击商品跳入商品详情页面 toGoodDetail(event){ console.log(event.currentTarget.dataset.id) let id = event.currentTarget.dataset.id wx.navigateTo({ url: '/pages/goodDetail/goodDetail?id=' + id , }) }, //全选 chooseAll(){ this.setData({ allChoose:!this.data.allChoose }) if(this.data.allChoose == true){ for(let index in this.data.cartList){ this.data.cartList[index].choose = true } }else{ for(let index in this.data.cartList){ this.data.cartList[index].choose = false } } this.setData({ cartList:this.data.cartList }) //更新全局里和缓存里的的购物车列表数据 app.globalData.cartList = this.data.cartList wx.setStorageSync('cartList', this.data.cartList) //计算合计 this.total() }, //计算合计价格 total(){ let sum = 0; for(let index in this.data.cartList){ if(this.data.cartList[index].choose == true){ sum = sum + this.data.cartList[index].price * this.data.cartList[index].number } } this.setData({ sum: sum.toFixed(2)//合计价格四舍五入 小数点后两位 }) }, //跳入订单页面 toOrder(){ // 把选择的商品放到订单列表 let orderList = [] for(let index in this.data.cartList){ if(this.data.cartList[index].choose == true){ orderList.push(this.data.cartList[index]) } } app.globalData.orderList = orderList //把订单列表放到全局 if(app.globalData.orderList.length == 0){ wx.showToast({ icon:'error', title: '请选择商品', }) return } wx.navigateTo({ url: '/pages/order/order', }) } })解释这段代码

最新推荐

recommend-type

全国地级市经济高质量发展发展指数(2000-2021年)-最新出炉.zip

全国地级市经济高质量发展发展指数(2000-2021年)-最新出炉.zip
recommend-type

Java 11道中级面试题(2025最新版).docx

Java 11道中级面试题(2025最新版)
recommend-type

Postman安装与功能详解:适用于API测试与HTTP请求

资源摘要信息:"Postman是一款广受欢迎的HTTP客户端应用程序,主要用于API测试。本资源提供了Postman的安装文档和安装包,供学习使用。Postman支持HTTP、HTTPS、SOAP等多种协议,具备数据导入导出、请求参数化、断言、测试脚本编写等强大功能,极大地提升了开发和测试人员的工作效率。 Postman的适用人群非常广泛,包括但不限于前端开发人员、后端开发人员、测试人员和运维人员。使用Postman可以方便地发送各种类型的HTTP请求,如GET、POST、PUT、DELETE等,并对API进行响应时间和性能测试,验证API的正确性与可靠性,实现自动化测试以及持续集成,并能导出测试数据和请求模板。 Postman作为一款免费的工具,用户可以通过其官方网站下载适用于Windows、Mac和Linux操作系统的安装包。该软件安装过程简单,运行高效,并且拥有直观的用户界面,使学习和使用变得简单便捷。此外,Postman还拥有详尽的文档资源和活跃的社区支持,用户在使用过程中遇到问题可以快速获得帮助,同时也能学习到更多的使用技巧和最佳实践。 安装包文件列表中包含了Postman的安装程序和相关的帮助文档,为用户提供了完整的安装和学习资源,确保用户能够顺利完成安装并迅速掌握使用方法。"
recommend-type

管理建模和仿真的文件

管理Boualem Benatallah引用此版本:布阿利姆·贝纳塔拉。管理建模和仿真。约瑟夫-傅立叶大学-格勒诺布尔第一大学,1996年。法语。NNT:电话:00345357HAL ID:电话:00345357https://theses.hal.science/tel-003453572008年12月9日提交HAL是一个多学科的开放存取档案馆,用于存放和传播科学研究论文,无论它们是否被公开。论文可以来自法国或国外的教学和研究机构,也可以来自公共或私人研究中心。L’archive ouverte pluridisciplinaire
recommend-type

C++自定义异常深度剖析:原理揭示与最佳实践指南

![C++的自定义异常(Custom Exceptions)](https://www.delftstack.com/img/Cpp/feature image - cpp custom exception.png) # 1. C++异常处理基础 ## C++异常处理概述 异常处理在C++程序中扮演着至关重要的角色,用于处理在程序执行过程中出现的非正常情况,比如文件读写错误、除以零的运算错误等。通过异常处理,开发者能够以一种结构化的方式管理错误,提高程序的健壮性和可维护性。 ## 关键概念:try, catch 和 throw C++中,异常处理涉及到三个关键词:`try`、`catch`
recommend-type

依赖注入顺序问题,A,B两个类都实现了某个接口,如何确保A类优先B类加载

在Spring框架中,依赖注入的顺序通常由Spring IoC容器控制,并不是按照类声明的顺序进行。如果你想要保证A类优先于B类加载并且使用,可以考虑以下几种策略: 1. **构造函数注入**: 将`A`类作为`B`类构造函数的参数。这样,当你创建`B`类的对象时,实际上也是间接地创建了`A`类的对象,进而保证了`A`类的初始化在前。 ```java @Service class BImpl implements MyInterface { private final A a; @Autowired public BImpl(A a) { this
recommend-type

Dart打造简易Web服务器教程:simple-server-dart

资源摘要信息:"simple-server-dart是一个使用Dart语言编写的简单服务器端应用。通过阅读文档可以了解到,这个项目主要的目标是提供一个简单的Web服务器实例,让开发者能够使用Dart语言快速搭建起一个可以处理HTTP请求的服务器。项目中的核心文件是server.dart,这个文件包含了服务器的主要逻辑,用于监听端口并响应客户端的请求。该项目适合那些希望学习如何用Dart语言进行服务器端开发的开发者,特别是对Dart语言有基础了解的用户。" 知识点详述: 1. Dart语言简介 - Dart是谷歌开发的一种编程语言,旨在提供一种简洁、面向对象的语言,能够用于客户端(如Web和移动应用)、服务器端以及命令行应用的开发。 - Dart设计之初就考虑到了高性能的需求,因此它既能在开发阶段提供快速的开发体验,又能编译到高效的机器码。 - Dart有自己的运行时环境以及一套丰富的标准库,支持异步编程模式,非常适合构建需要处理大量异步任务的应用。 2. Dart在服务器端的运用 - Dart可以用于编写服务器端应用程序,尽管Node.js等其他技术在服务器端更为常见,但Dart也提供了自己的库和框架来支持服务器端的开发。 - 使用Dart编写的服务器端应用可以充分利用Dart语言的特性,比如强类型系统、异步编程模型和丰富的工具链。 3. 项目结构与文件说明 - 项目名称为simple-server-dart,意味着这是一个设计来展示基本服务器功能的项目。 - 在提供的文件列表中,只有一个名为simple-server-dart-master的压缩包,这表明这个项目可能是一个单一的主干项目,没有额外的分支或标签。 - 文件列表中提到的"server.dart"是该项目的主要执行文件,所有服务器逻辑都包含在这个文件中。 4. 运行服务器的基本步骤 - 根据描述,要运行这个服务器,用户需要使用Dart SDK来执行server.dart文件。 - 通常,这涉及到在命令行中输入"dart server.dart"命令,前提是用户已经正确安装了Dart SDK,并且将项目路径添加到了环境变量中,以便能够从任意目录调用dart命令。 - 运行服务器后,用户可以通过访问绑定的IP地址和端口号来测试服务器是否正常运行,并且能够处理HTTP请求。 5. Web服务器构建基础 - 构建Web服务器通常需要处理网络编程相关的问题,如监听端口、解析HTTP请求、处理会话和构建响应。 - 服务器通常需要能够处理GET、POST等HTTP方法的请求,并且根据请求的不同返回适当的响应内容。 - 在本项目中,服务器的具体功能和实现细节将会通过阅读server.dart文件来了解。 6. Dart SDK与工具链 - 开发者在编写Dart代码后,需要通过Dart编译器将代码编译成不同平台上的机器码。Dart SDK提供了一个命令行工具,可以编译和运行Dart程序。 - Dart还提供了pub包管理器,用于管理项目依赖和下载第三方库。这对于服务器端项目来说同样重要,因为开发者可能需要使用到各种开源库来辅助开发。 7. 异步编程模式 - Dart语言内置了对异步编程的支持。在Web服务器编程中,异步操作是非常常见的,例如处理I/O操作时,程序需要等待磁盘或网络响应而不能阻塞其他操作。 - Dart使用Future和Stream来处理异步编程,开发者可以通过这些工具来构建非阻塞的异步代码逻辑。 总结,simple-server-dart项目是一个展示如何使用Dart语言创建简单Web服务器的示例。它强调了Dart在服务器端编程方面的可能性,并且为那些对Dart有兴趣的开发者提供了一个实践的起点。通过本项目的探索,开发者能够获得Dart服务器端编程的初步经验,并且能够将所学知识应用到更复杂的项目中。
recommend-type

"互动学习:行动中的多样性与论文攻读经历"

多样性她- 事实上SCI NCES你的时间表ECOLEDO C Tora SC和NCESPOUR l’Ingén学习互动,互动学习以行动为中心的强化学习学会互动,互动学习,以行动为中心的强化学习计算机科学博士论文于2021年9月28日在Villeneuve d'Asq公开支持马修·瑟林评审团主席法布里斯·勒菲弗尔阿维尼翁大学教授论文指导奥利维尔·皮耶昆谷歌研究教授:智囊团论文联合主任菲利普·普雷教授,大学。里尔/CRISTAL/因里亚报告员奥利维耶·西格德索邦大学报告员卢多维奇·德诺耶教授,Facebook /索邦大学审查员越南圣迈IMT Atlantic高级讲师邀请弗洛里安·斯特鲁布博士,Deepmind对于那些及时看到自己错误的人...3谢谢你首先,我要感谢我的两位博士生导师Olivier和Philippe。奥利维尔,"站在巨人的肩膀上"这句话对你来说完全有意义了。从科学上讲,你知道在这篇论文的(许多)错误中,你是我可以依
recommend-type

C++异常处理秘籍:从新手到专家的自定义异常策略大全

![C++的自定义异常(Custom Exceptions)](https://www.delftstack.com/img/Cpp/feature image - cpp custom exception.png) # 1. C++异常处理基础 ## 1.1 异常处理概述 异常处理是C++中管理程序运行时错误的标准方式。它允许开发者以结构化的方式来处理程序执行中发生的错误情况。通过定义异常类,使用`try`、`catch`和`throw`关键字,开发人员可以创建健壮的错误处理机制。 ## 1.2 异常类别 在C++中,异常可以是任何类型的对象。然而,通常会使用`std::except
recommend-type

给定一个网址字符串,要求给出网址中网站主页的地址。 提供网站 URL,您需要删除 URL 的协议并仅打印主页 URL。 输入 输入为一行行的网址字符串 输入将有多行 String,代表 URL 输出 输出网址中网站主页的地址。 仅打印每个 URL 的主页 URL

给定一个网址字符串,首先解析该URL以提取主机名部分(通常出现在"//"之后,直到最后一个"/"之前),这通常是主页的地址。例如,如果输入的是 "https://www.example.com/path/to/home", 主页地址就是 "www.example.com"。我们只需要去掉协议(如http或https)以及路径(如果有的话)。这里是一个简单的步骤: 1. 使用正则表达式分割URL,获取域名部分。 2. 如果域名以"/"结尾,表示这是一个相对URL,需要添加默认协议(如"//www.")前缀。 3. 打印处理后的主页地址。 以下是伪代码形式: ```python def ge