当前位置: 首页 > 知识库问答 >
问题:

如何像PHP一样在javascript中进行舍入

陆栋
2023-03-14

我试图用和PHP一样的方式在Javascript中对浮点数进行舍入;但是我不能用同样的方式将两种语言的数字四舍五入:< code > 6.4049999999999

当我使用PHP循环时,我得到:6.41,但当我尝试使用Javascript循环时,总是得到6.40

信息: 正确答案是 https://stackoverflow.com/a/54721202/4359029

我的脚本尝试:

module.exports = function round (value, precision, mode) {
  var m, f, isHalf, sgn // helper variables
  // making sure precision is integer
  precision |= 0
  m = Math.pow(10, precision)
  value *= m
  // sign of the number
  sgn = (value > 0) | -(value < 0)
  isHalf = value % 1 === 0.5 * sgn
  f = Math.floor(value)

  if (isHalf) {
    switch (mode) {
      case 'PHP_ROUND_HALF_DOWN':
      // rounds .5 toward zero
        value = f + (sgn < 0)
        break
      case 'PHP_ROUND_HALF_EVEN':
      // rouds .5 towards the next even integer
        value = f + (f % 2 * sgn)
        break
      case 'PHP_ROUND_HALF_ODD':
      // rounds .5 towards the next odd integer
        value = f + !(f % 2)
        break
      default:
      // rounds .5 away from zero
        value = f + (sgn > 0)
    }
  }

  return (isHalf ? value : Math.round(value)) / m
}

摘自:http://locutus.io/php/math/round/

round(decimal: number, decimalPoints: number): number{
    let roundedValue = Math.round(decimal * Math.pow(10, decimalPoints)) / Math.pow(10, decimalPoints);

    console.log(`Rounded ${decimal} to ${roundedValue}`);
    return roundedValue;
}

提取自:https://stackoverflow.com/a/50918962/4359029

我尝试了其他解决方案...但没有成功。

有人能告诉我如何使Javascript的舍入像PHP一样工作吗?

你能告诉我为什么在我解释的情况下,它们以不同的方式工作吗?

共有3个答案

孔俊爽
2023-03-14

你可以这样做:

function roundToXDigits(value, digits)
{
    if (!digits) {
        digits = 2;
    }

    value = value * Math.pow(10, digits);
    value = Math.round(value);
    value = value / Math.pow(10, digits);

    return value
}

var num = roundToXDigits(6.404999999999999, 3); //creates 6.405

console.log(roundToXDigits(num, 2)); //creates 6.41

问题是,JavaScript在技术上没有错。6.4049 -

来源:脚本数学,四舍五入到小数点后两位

^^布莱斯答案的扩展用法。

宗穆冉
2023-03-14

您可以使用toPrecision函数

它将被提供的精度四舍五入。这里我四舍五入4以获得6.405,然后四舍五入3以获得6.41

parseFloat((6.404999999999999).toPrecision(4)).toPrecision(3);
console.log(parseFloat((6.404999999999999).toPrecision(4)).toPrecision(3));
薛烈
2023-03-14

我认为最好的答案是下一个:

function roundLikePHP(num, dec){
  var num_sign = num >= 0 ? 1 : -1;
  return parseFloat((Math.round((num * Math.pow(10, dec)) + (num_sign * 0.0001)) / Math.pow(10, dec)).toFixed(dec));
}

我用1.015尝试了其他解决方案,但没有按预期工作。

这个解决方案运行得很好,就像PHP回合一样,我尝试过的所有数字。

 类似资料:
  • 问题内容: 我如何获得年度的当前星期数,例如PHP的星期数? 它应该是ISO-8601的 星期数,从星期一开始的星期数。 问题答案: 在观察夏令时和1月1日是星期五的年份中,日期存在问题。通过使用所有UTC方法进行修复。以下代码将相同的结果返回给Moment.js。 创建“ UTC”日期时,小时为零。 最小化的原型版本(仅返回星期数): 测试部分 在本部分中,您可以输入YYYY-MM-DD格式的任

  • 问题内容: 我想使用Javascript舍入一个数字。由于数字是货币,因此我希望像以下示例一样将其舍入(小数点后两位): 192.168 => 192.20 192.11 => 192.20 192.21 => 192.30 192.26 => 192.30 192.20 => 192.20 如何使用Javascript实现呢?内置的Javascript函数将根据标准逻辑对数字进行四舍五入(四舍五

  • 编写一个按日期分组的程序 主题输出格式应为:[{“日期”:“2021-01-01”,“主题列表”:[{“主题名称”:“空气”,“主题计数”:3},{“主题名称”:“速度”,“主题计数”:1}],{},{}]

  • 问题内容: 在使用流的Java 8中,当我一个接一个地链接方法时,将以流水线方式执行操作。 例: 输出:- 但是当我在javascript中尝试类似的时候,结果却不同。正如在javascript中一样,第一个操作完成,然后执行第二个操作。例如:- 输出:- JavaScript中有什么方法可以使其以管道方式执行操作,并且可以像Java程序一样获得输出? 这个问题仅询问如何像JavaScript那样

  • 我试图在朱莉娅做一个非常简单的逻辑回归。但是朱莉娅的打字系统似乎给我带来了问题。基本上,glm预测给了我一系列的可能性。我想做一个简单的循环,如果概率>=0.5,它是1,否则是0。我希望这些标签也是整数。

  • 问题内容: 在Python 2中,我使用了: 我试过了: 问题答案: 在Python2中,是一个引入了以下语句的关键字: 在Python3中,是可以调用的函数: 在这两个版本中,都是一个运算符,它在左侧需要一个字符串,在右侧需要一个值或一个值的元组或一个映射对象(如)。 因此,您的行应如下所示: 另外,对于Python3和更高版本,建议使用-style格式而不是-style格式: Python 3