gpt4 book ai didi

javascript - 如何替换特定位置号码处的数字

转载 作者:行者123 更新时间:2023-11-29 16:33:06 25 4
gpt4 key购买 nike

我想要一种简单的方法来使用 javascript 替换特定“位值”处的数字。例如,如果我有号码 1234.567,我可能想用 1 替换百位数字,这样我的新号码就是 1134.567。

对于我的特定应用程序,我正在处理金钱,因此我确保我的号码只有 2 位小数。知道这一点我可以实现如下所示的东西:

const reversed = String(myNumber).split("").reverse().join("");
const digitIndex = myDigit + 2; // where myDigit is the digit i want
to replace (ones = 0, tens = 1, etc)

String.prototype.replaceAt=function(index, replacement) {
return this.substr(0, index) + replacement+ this.substr(index +
replacement.length);
}

const replaced = reversed.replaceAt(digitIndex, myReplacement);
return parseFloat(replaced.split("").reverse().join(""));

这个想法是反转字符串,因为我不知道数字有多大,替换数字,然后再次反转并将其变回数字。这绝对看起来有点矫枉过正。还有更好的想法吗?

最佳答案

这是使用正则表达式执行此操作的方法:

RegExp(`\\d(?=\\d{${index - 1}}(\\.|$))`)

说明

(?=\\d{${index - 1}}(\\.|$))index - 1 数字匹配的非捕获前向查找后跟小数点或字符串结尾

\\d 要替换的单个数字(如果前向查找已匹配)

String.prototype.replaceAt = function(index, replacement) {
const re = new RegExp(`\\d(?=\\d{${index - 1}}(\\.|$))`);
return this.replace(re, replacement);
}

const tests = [
{test: '123.45', index: 1},
{test: '123.45', index: 2},
{test: '123.45', index: 3},
{test: '123', index: 1},
{test: '123', index: 2},
{test: '123', index: 3}
];

tests.forEach(({test, index}) => {
console.log(test.replaceAt(index, 'x'))
})

更新:

您可以使用它来扩展Number:

Number.prototype.replaceAt = function(index, replacement) {
const re = new RegExp(`\\d(?=\\d{${index - 1}}(\\.|$))`);
return parseFloat(`${this}`.replace(re, replacement));
}

const tests = [
{test: 123.45, index: 1},
{test: 123.45, index: 2},
{test: 123.45, index: 3},
{test: 123, index: 1},
{test: 123, index: 2},
{test: 123, index: 3}
];

tests.forEach(({test, index}) => {
console.log(test.replaceAt(index, 9))
})

更新:

这是一种用纯数学来实现的方法

Number.prototype.replaceAt = function(index, val) {
const a = parseInt(this / 10 ** index) * 10 ** index;
const b = val * 10 ** (index - 1);
const c = this % 10 ** (index - 1);
return a + b + c;
}

const tests = [
{test: 123.45, index: 1},
{test: 123.45, index: 2},
{test: 123.45, index: 3},
{test: 123, index: 1},
{test: 123, index: 2},
{test: 123, index: 3}
];

tests.forEach(({test, index}) => {
console.log(test.replaceAt(index, 9))
})

关于javascript - 如何替换特定位置号码处的数字,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53889019/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com