gpt4 book ai didi

javascript - 将 86.678、1.12517、0.61457 等字符串转换为数字并递增/递减最后 3 位数字

转载 作者:行者123 更新时间:2023-11-30 09:59:09 26 4
gpt4 key购买 nike

我正在尝试找出一种方法,将 86.678、1.12517、0.61457 等字符串转换为数字,而不会丢失任何小数点信息和数字数量。

数字在本质上是不同的,但我需要一种方法来弄清楚如何将每个此类数字的最后 2 位数字递增/递减 30,例如,如果我想递增 86.678,它将变为 86.708 我无法计算这是因为每次在 . 之后都有不同数量的数字,但总是至少有 3 个,也会有像 89.990 这样的情况,数字需要增长,所以 90.020 将是​​新的,相同适用于递减。

最佳答案

这非常困惑和丑陋,但对于格式良好的数据,它应该可以工作。

function incrementalize(value) {
return parseFloat(value) +
parseFloat(value.replace(/\d/g, 0).replace(/00$/, '30'));
}

这里的第一个正则表达式将所有内容清零,所以 123.4567 变成了 000.0000,然后尾随的零对被换掉,所以你得到 000.0030。这是添加到您的原始值。

请注意,在将数字与小数值相加时,会显示出 IEEE-754 double 字固有的不精确性。例如,您的 0.61457 + 0.00030 示例。

实例:

test(86.678);
test(1.12517);
test(0.61457);
test(0.0123);
test(0.9999);

function incrementalize(value) {
return parseFloat(value) +
parseFloat(value.replace(/\d/g, 0).replace(/00$/, '30'));
}

function test(num) {
var newNum = incrementalize(String(num));
snippet.log(num + " => " + newNum);
}
<!-- Script provides the `snippet` object, see http://meta.stackexchange.com/a/242144/134069 -->
<script src="http://tjcrowder.github.io/simple-snippets-console/snippet.js"></script>

更新:为了保持初始值的精度,使用 sprintf-js 库:

function incrementalize(value) {
return sprintf(
'%.' + value.split(/\./)[1].length + 'f',
parseFloat(value) +
parseFloat(value.replace(/\d/g, 0).replace(/00$/, '30'))
);
}

关于javascript - 将 86.678、1.12517、0.61457 等字符串转换为数字并递增/递减最后 3 位数字,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32591892/

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