js处理小数 , toFixed()的潜在问题

[b] 一、toFixed能做什么?[/b]

以下是摘自网络的toFixed的介绍:

toFixed 方法:
返回一个字符串,代表一个以定点表示法表示的数字。

numObj.toFixed([fractionDigits])

参数
numObj
必选项。一个 Number 对象。

fractionDigits

可选项。小数点后的数字位数。其值必须在 0 – 20 之间,包括 0 和 20。

说明
toFixed 方法返回一个以定点表示法表示的数字的字符串形式。该字符串中小数点之前有一位有效数字,而且其后必须包含 fractionDigits 数字。

如果没有 fractionDigits 参数,或者该参数为 undefined,toFixed 方法假定该值为 0。

[b]二、toFixed可以四舍五入吗?[/b]

答案是可以。但是问题也正在于此。这种四舍五入是不稳定的(不同的浏览器不一样)。

(1).
<input onclick="alert(0.009.toFixed(2))" type="button" value="显示0.009.toFixed(2)">


在ie7下点击按钮会显示0.00,而ff会是0.01。

(2)
<input onclick="alert(0.097.toFixed(2))" type="button" value="显示0.097.toFixed(2)">


ie和ff都正常。

可见对于ie而言有一部分数字在使用toFixed时是不能得到正确的四舍五入的结果的。这个问题可能很多朋友都没有意识到,而这个问题说小也小,但有时候却也会带来恶劣的后果。

就像上面0.009.toFixed(2)这个例子(0.009是一系列处理后的结果),恰好我就遇上了。在一个页面当中因为是在后台代码中做的计算因此显示为1%,而在另一个页面因为使用了toFixed结果显示为0%。为此被客户批了一顿。

OK,既然有这样的问题,又怎么解决呢?

[b]三、替代方案:[/b]

正如很多朋友所想,我们可以重写这个方法:

Number.prototype.toFixed = function( fractionDigits )...

下面给出一个简陋的解决方案:

Number.prototype.toFixed = function( fractionDigits )
{
//没有对fractionDigits做任何处理,假设它是合法输入
return (parseInt(this * Math.pow( 10, fractionDigits ) + 0.5)/Math.pow(10,fractionDigts)).toString();
}

覆写toFixed后的显示例子如下:

<html>
<head>
<script type="text/javascript">
Number.prototype.toFixed = function(s)
{
return (parseInt(this * Math.pow( 10, s ) + 0.5)/ Math.pow( 10, s )).toString();
}
</script>
</head>
<body>
<input onclick="alert(0.009.toFixed(2))" type="button" value="显示0.009.toFixed(2)">
</body>
</html>



OK,问题解决了。
JS处理数据四舍五入(tofixed与round的区别详解) 下面小编就为大家带来一篇JS处理数据四舍五入(tofixed与round的区别详解)。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧 立即下载

相关推荐

Zemax新手别慌!一文搞懂几何像差:从球差、慧差到色差的实战识别与优化

本文为Zemax新手提供几何像差实战指南,详细解析球差、彗差和色差的识别与优化方法。通过软件操作关键节点和实际项目决策逻辑,帮助光学设计师快速掌握像差诊断与优化技巧,提升光学设计效率。

weixin_42524708的博客 262

toFixed 方法潜在问题

引用此文做记录http://www.cnblogs.com/MythYsJh/archive/2009/02/13/1389843.html 我相信大家在写脚本处理数字的时候肯定会经常用到toFixed方法。 一、toFixed能做什么? 以下是摘自网络的toFixed的介绍: toFixed 方法: 返回一个字符串,代表一个以定点表示法表示的数字。 numObj.toF...

jslfl的专栏 397

传感器融合的智能演进:ST-MC-Workbench中霍尔与编码器的协同控制策略

本文探讨了ST-MC-Workbench中霍尔传感器与编码器的协同控制策略,通过传感器融合技术提升电机控制精度。文章详细介绍了分层处理架构、霍尔安装角度优化及编码器Z脉冲容错机制,展示了在新能源汽车和工业应用中的实际效果,为高精度位置检测提供了解决方案。

weixin_29159441的博客 485

toFixed()方法解读

本以为是四舍五入的方法,就使用在了js的运算中,但后来测试发现有的数运算是正确的,有的是不正确的。toFixed是javascript中将number规范为指定显示小数位数的方法。方法,因为本人觉得这个方法可以实现保留指定位数小数后不足位自动补零很好用。不是传统意义上的四舍五入。也并非采用银行家算法。

Cool_Cool_123的博客 5551

【ROS2】Arduino系列之机器人底盘实现

介绍ros中提供的一个已经封装了的模块: ros_arduino_bridge,该模块由下位机驱动和上位机控制两部分组成,通过该模块可以更为快捷、方便的实现自己的机器人平台

guilin 1486

JavaScript - Blob / File / base64 使用场景介绍与相互转换

前言 本文首先介绍一下这三种对象使用场景,最后介绍下它们之间互转格式的解决方案。 您前端一旦涉及到文件或图片上传到服务器, 就势必离不了Blob/File/base64三种主流的类型。 Blob MDN:https://developer.mozilla.org/zh-CN/docs/Web/API/Blob 您可以观察到,像一些图片处理插件(例如有名的vue-cropper)图片裁剪插件, 它们将图片处理完毕后,都将使用blob对象返回处理好的图片,供开发者用于上传服务器。

🏆 前端领域优质创作者 4495

前端使用toFixed()保留小数位数的三个坑

很多时候,我们需要计算出百分比,比如在进度条上,需要保留两位小数或者整数,这个时候回使用到toFixed(0),或者toFixed(2),这种形式来保留小数位数,但是使用这个方法会有两个问题:(一),如果数据是0的情况下,0.toFixed(0)这样使用会报错,(三),在使用parseFloat和toFixed保留两位小数后再乘100,,并不是两位的小数了,所以写法应该做一些改动,才能保证数据的准确性。,如果我们期望得到一个数值,那么需要再转化为Number类型;(二),使用toFixed方法转化后,

weixin_55894946的博客 3万+

Openclaw错误分析与解决方案之:Agent couldn’t generate a response.

Openclaw错误分析与解决方案之:Agent couldn't generate a response. Note: some tool actions may have already been executed — please verify before retrying.

多媒体编程、网络编程、系统编程、网络安全编程、驱动编程 1317

toPrecision 和 toFixed 和 Math.round 的区别?

一、toPrecision toPrecision意思是保留精度,其参数是一个数字,表示可以保留精度的位数 let num = 0.11 console.log(num.toPrecision(2)) //0.11 console.log(num.toPrecision(6)) //0.110000 如上所示,我们可以知道,toPrecision可以表示从不为0的位置开始,往后n位。 二、toFixed toFixed表示保留位数从小数点后开始,并且是四舍五入。 let num = 0.1 let

weixin_47450807的博客 2917

HTML流光爱心(完整代码)

HTML语言实现红蓝色流光爱心效果的完整代码。

AIGC 1万+

[系统安全] 四十七.恶意软件分析 (3)动态分析经典沙箱Cape的安装和基础用法详解

系统安全将更好地帮助初学者了解病毒逆向分析和系统安全。前文详细介绍恶意代码静态分析经典工具Capa的基础用法,以及批量提取静态特征和ATT&CK技战术,主要是从提取的静态特征Json文件中提取关键特征。这篇文章将详细讲解动态分析沙箱Cape,其是一个开源的自动恶意软件分析系统,通过自动运行和分析恶意软件,全面分析和提取恶意软件的关键特征。本文先介绍Cape沙箱的安装和基础用法,后续随着深入再分享。基础性文章,希望对您有帮助!

杨秀璋的专栏 6739

java scpipt知识全总结

JavaScript:是由网景(netscpae)开发的的基于对象的脚本语言,主要用于开发交互式的web界面 标准:ECMAScript JavaScript是ECMAScript的实现     /******************JavaScript:***************************/ 一、基础体系 1.ECMAScript(核心语法) 2.文档对象模型/文...

与华的博客 493

华为OD机考真题 新系统 - 小菊的寻宝之旅(Java/Py/C/C++/Js/Go)

华为OD机试真题 新系统【小菊的寻宝之旅】,提供C语言、Java、C++、Python、Go、JavaScript源码实现,并提供完整思路讲解,以及在线OJ模拟做题。华为OD机试真题 【小菊的寻宝之旅】多语言题解。

qq_45776114的博客 627

JS数据四舍五入 处理小数 , toFixed()的潜在问题

toFixed() 函数使用 问题 toFixed() 函数不能很精确的四舍五入 例如 2.055.toFixed(2) 2.05 2.056.toFixed(2) 2.06 toFixed() 原生的方法 不能够很精确的 四舍五入 这个方法 可以自己编写方式使用 也可以 使用 Math.round(2.055 * 1000 / 10) / 100 Math.round() ...

HEshenghuxi的博客 700

win10 跳过U8环境检测的IE WebControls.rar

win10 安装u8的时候 提示IE WebControls 不通过,这个工具可以欺骗u8的检查。 跳过U8环境检测的IE WebControls。提示导入失败后,重新检测通过。

NTscan扫描工具

ntscan是一个扫描器,可以扫描没有密码和弱密码的共享,先到配置文件中填写猜测的用户名和密码,扫描过程中右侧出现的是扫描日志。

JavaScript中的toFixed()

一、用法 设置浮点数的精度,采用的四舍五入。 var a = 1.333; console.log('a:', a.toFixed(2)); //a:1.33 二、问题 toFixed还不同的浏览器实现,在IE10及以上里面是正常的四舍五入,但是别的浏览器里面就不一样了,它不是正常的四舍五入(等下重点说),比如: var a = 1.335; console.log(a.toFixed(2)) ...

如雨随行的博客 2万+

WINCC7.3破解文件

WINCC7.3硬件够破解文件,有需要的下载!WINCC7.3硬件够破解文件,有需要的下载!

JavaScript toFixed()四舍五入问题

文章目录保留小数银行家舍入法使用Math.round()进行取舍 保留小数 toFixed() 语法:数字.toFixed(要保留几位小数) 返回值:以**字符串**的形式返回结果,如果不够指定的位数会使用0补齐。 注意:toFixed不是以四舍五入的形式进行取舍的,而是使用银行家舍入法进行取舍的 银行家舍入法 其实质是一种【四舍六入五取偶】的方法。 规则是: 当舍去位的数值 < 5时,直接舍去 当舍去位的数值 >= 6时,在舍去的同时向前进一位 当舍去位的数值 = 5时:

软不隆冬的er更 7640

jre9下载 jdk9

(Java SE Runtime Environment 9.0) 9.0u175 官方最新版 【x86|x64】

js 关于 toFixed 问题的总结

toFixed 四舍五入问题 , decimal.js解决精度问题 ,问题发现 及问题造成原因探寻

Leon_940002463的博客 8483

关于toFixed()保留两位小数--四舍五入不精确 问题解决

近期用到小数点保留两位 使用toFixed() 发现不太精确 例如10.125 保留两位后 为10.13 但使用 var num = 10.125; num.toFixed(2) 返回的结果为10.12 经测试发现大于5会进1 等于5并不会进1 解决办法 写个公共方法 需要时候 调用即可 示例: 根据自己需要酌情处理:我是写在main.js中,仅供参考: Vue.prototype.fixed = function (num) { var times = Math.pow(10, 2); va

小柠檬爱编程 5511

js中toFixed() 的用法

一、定义和用法 toFixed() 方法可把 Number 四舍五入为指定小数位数的数字。 语法 NumberObject.toFixed(num) 参       数 描述 num 必需。规定小数的位数,是 0 ~ 20 之间的值,包括 0 和 20,有些实现可以支持更大的数值范围。如果省略了该参数,将用 0 代替。 返回值 返...

一只快乐的小猴子的博客 7028

js小数运算出现多为小数问题_解决js小数求和出现多位小数问题

在小数相加时,可能会产生多个小数位。如下所示:var x=1+1; //2var x=1.20+1.11; //2.31var x=1.56+1.76; //3.3200000000000003导致上述原因是因为Javascript的数字类型是以64位的IEEE 754格式存储的。在用的时候一定要小心,测试要到位。解决方法:加上toFixed()函数就可以把函数控制在想要的小数位以内,...

weixin_39599166的博客 3198

JS当中toFixed()方法5不进位问题处理

最近发现JS当中toFixed()方法存在一些问题,采用原生的Number对象的原型对象上的toFixed()方法时,规则并不是所谓的“四舍五入”或者是“四舍六入五成双”,以谷歌浏览器为例: alert(1.5451.toFixed(2));//输出 1.55 alert(1.545.toFixed(2)); //输出 1.54 alert(1.5551.toFixed(2)); //输出 1....

qq_39869537的博客 2473

jQuery的toFixed() 方法-保留小数位数

当后端给的返回值是小数的时候,前端需要对小数进行处理,得到自己想要的来展示,多数的时候,是保存小数点后面一位或者两位,这个时候,可以使用toFixed() 方法,可把 Number 四舍五入为指定小数位数的数字。 1:保留小数点后面两位 <script type="text/javascript"> let speed=43.3657 console.log(speed.t...

祈澈菇凉 3587
上一篇: Spring 框架的架包分析、功能作用、优点
下一篇: tomcat6.exe与tomcat6w.exe的区别
yufei_java
博客等级 码龄10年 18粉丝 60原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值