将字符串(如86.678,1.12517,0.61457)转换为数字并递增/递减最后3位数字

Converting strings like 86.678, 1.12517, 0.61457 to numbers and increment/decrement last 3 digits

本文关键字:数字 3位 最后 转换 61457 字符串 12517      更新时间:2023-09-26

我正试图找出一种方法来转换字符串,如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双精度数字固有的不精度。例如,你的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'))
  );
}