迟海
迟海
  • 发布:2022-01-18 16:30
  • 更新:2022-09-15 18:22
  • 阅读:700

【报Bug】安卓APP中Number.prototype.toLocaleString()的返回值不正确

分类:uni-app

产品分类: uniapp/App

PC开发环境操作系统: Windows

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

手机系统: Android

手机系统版本号: Android 11

手机厂商: OPPO

手机机型: Reno Z

页面类型: vue

vue版本: vue2

打包方式: 云端

项目创建方式: CLI

CLI版本号: 2.0.1-33520211229002

示例代码:
console.log((1000000).toLocaleString());

操作步骤:

调用必现

预期结果:

返回正确的格式化后结果

实际结果:

并未格式化

bug描述:

Number.prototype.toLocaleString()在安卓中返回值并未格式化,例如(1000000).toLocaleString()运行后返回"1000000",但是正确的返回值应该是"1,000,000"。IOS中是正常的,在andorid10和android11返回值都不正确。

2022-01-18 16:30 负责人:无 分享
已邀请:
DCloud_UNI_GSQ

DCloud_UNI_GSQ

https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Number/toLocaleString

  • 迟海 (作者)

    locales的参数是可选的,如果没有传是以系统语言环境为准,但是无论是zh-CN还是en-US都应该是要带千分位符的

    2022-01-19 16:56

  • DCloud_UNI_GSQ

    回复 迟海: 和运行环境的实现有关

    2022-01-19 19:51

1***@qq.com

1***@qq.com

main.js里手动加上

// #ifdef APP-PLUS  
// app toLocaleString 有bug,添加上  
Number.prototype.toLocaleString = function() {  
    // 来自 https: //blog.csdn.net/qq_45768871/article/details/105592666  
    let [integer, decimal] = String(this).split('.');  
    let regExp = /\d{1,3}(?=(\d{3})+$)/g;  
    integer = integer.replace(regExp, '$&,');  
    let decimalTemp = ""  
    if (decimal) {  
        if ( decimal.length > 3) {  
            decimalTemp = decimal.slice(0,3)  
        }else{  
            decimalTemp = decimal  
        }  
    }  

    return `${integer}${!decimalTemp ? '': '.'+decimalTemp}`;  
}  
// #endif

该问题目前已经被锁定, 无法添加新回复