1***@qq.com
1***@qq.com
  • 发布:2025-03-19 09:45
  • 更新:2025-03-19 11:17
  • 阅读:121

【报Bug】0.855.toFixed(2) == 0.85 是错的 应该是0.86

分类:uni-app

产品分类: uniapp/App

PC开发环境操作系统: Windows

PC开发环境操作系统版本号: 10

HBuilderX类型: 正式

HBuilderX版本号: 4.45

手机系统: Android

手机系统版本号: Android 10

手机厂商: 华为

手机机型: MI MAX

页面类型: vue

vue版本: vue3

打包方式: 云端

项目创建方式: HBuilderX

示例代码:

console.log(0.855.toFixed(2))

操作步骤:

console.log(0.855.toFixed(2))

预期结果:

0.86

实际结果:

0.85

bug描述:

js的 0.855.toFixed(2) == 0.85

2025-03-19 09:45 负责人:无 分享
已邀请:
爱豆豆

爱豆豆 - 办法总比困难多

应该是js精度丢失导致的 根uniapp没关系 自定义一个四舍五入方法就行了

//自定义四舍五入  
  function toFixedCustom(num, precision) {  
    const factor = Math.pow(10, precision);  
    return (Math.round(num * factor) / factor).toFixed(precision);  
  }  
  console.log(toFixedCustom(0.855, 2)); // 输出 "0.86"

0.855 在二进制中是一个无限循环小数,实际存储值可能略小于 0.855(如 0.8549999999999999)
当第三位小数小于5时,会直接截断而非四舍五入。此时若实际值为 0.854999...,第三位是4,结果即为 0.85。

靐齉齾麤龖龗

靐齉齾麤龖龗 - 解决不了问题,那就解决提出问题的人

在谷歌浏览器控制台打印就是0.85了。。不关uniapp的事,可以用楼上的办法。
也可以使用

Number(0.855).toLocaleString('zh', {  
  minimumFractionDigits: 2,  
  maximumFractionDigits: 2  
})

嘛,这个方法会表示成千分位的,还需要.replace(/,/g, ''),哈哈

要回复问题请先登录注册