如何舍入至多 2 位小数?

如何解决如何舍入至多 2 位小数??

开发过程中遇到如何舍入至多 2 位小数?的问题如何解决?下面主要结合日常开发的经验,给出你关于如何舍入至多 2 位小数?的解决方法建议,希望对你解决如何舍入至多 2 位小数?有所启发或帮助;

问题描述

使用Math.round()

Math.round(num * 100) / 100

或者更具体地说,为了确保 1.005 正确舍入,请使用Number.EPSILON

Math.round((num + Number.EPSILON) * 100) / 100

如果值是文本类型:

parsefloat("123.456").toFixed(2);

如果值是一个数字:

var numb = 123.23454;
numb = numb.toFixed(2);

一个缺点是,像 1.5 这样的值会给出“1.50”作为输出。@minitech 建议的修复:

var numb = 1.5;
numb = +numb.toFixed(2);
// Note the plus sign that drops any "extra" zeroes at the end.
// It changes the result (which is a string) into a number again (think "0 + foo"),
// which means that it uses only as many digits as necessary.

这似乎Math.round一个更好的解决方案。在某些情况下,它正确舍入:

Math.round(1.005 * 100)/100 // Returns 1 instead of expected 1.01!

在某些情况下, toFixed() 也正确舍入(在 Chrome v.55.0.2883.87 中测试)!

例子:

parsefloat("1.555").toFixed(2); // Returns 1.55 instead of 1.56.
parsefloat("1.5550").toFixed(2); // Returns 1.55 instead of 1.56.
// However, it will return correct result if you round 1.5551.
parsefloat("1.5551").toFixed(2); // Returns 1.56 as expected.

1.3555.toFixed(3) // Returns 1.355 instead of expected 1.356.
// However, it will return correct result if you round 1.35551.
1.35551.toFixed(2); // Returns 1.36 as expected.

我猜,这是因为 1.555 实际上在幕后类似于 float 1.55499994。

使用具有所需舍入算法的脚本,例如:

function roundNumber(num, scale) {
  if(!("" + num).includes("e")) {
    return +(Math.round(num + "e+" + scale)  + "e-" + scale);
  } else {
    var arr = ("" + num).split("e");
    var sig = ""
    if(+arr[1] + scale > 0) {
      sig = "+";
    }
    return +(Math.round(+arr[0] + "e" + sig + (+arr[1] + scale)) + "e-" + scale);
  }
}

这不是每个人的通用解决方案。有几种不同的舍入算法,您的实现可能会有所不同,具体取决于您的要求。

是避免前端计算并从后端服务器拉取舍入值。

另一种可能的解决方案,这也不是防弹的。

Math.round((num + Number.EPSILON) * 100) / 100

在某些情况下,当你对 1.3549999999999998 这样的数字进行四舍五入时,它会返回不正确的结果。应该是 1.35,但结果是 1.36。

解决方法

我想最多四舍五入小数点后 2 位,但仅限于必要时

输入:

10
1.7777777
9.1

输出:

10
1.78
9.1

如何在 JavaScript 中做到这一点?

编程问答问答

附加了我的广告链接[https://plnkr.co/edit/lnF09XtK3eDo1a5v] 我们是否可以选择在不同的组值之间放置一个
我已经使用TensorFlow 2.2版本训练了我的Keras模型。现在必须将其部署在CPP中,即希望以c ++语言进行推理/
我们正在使用ag-grid-aurelia组件。尝试使用rowModelType作为客户端加载网格。如果数据超过1万行,则加载将
我正在尝试从表中检索ID,然后将其发布到另一个表中,但我无法获取该值。 这是我的模型发布模型代
在C ++中,使用+进行字符串连接是否不好?例如下面的 <pre><code>string str = &#34;&#34;; int n = 10; for (int i =
<pre><code>&lt;select name=&#34;organization&#34; id=&#34;orgId&#34; style=&#34;&lt;?php echo $_POST[&#39;report_type&#39;] == &#39;org_part
<h2> parent.component.ts </h2> <pre><code>public test(){ //some code..... } </code></pre> <h2> parent.component.html </h2> <pre><code>&lt;a
我有两个数据框。一个数据框包含不同公司的财务数据,另一数据框包含相应的行业代码。我现在想向
微信公众号搜索 “ 程序精选 ” ,选择关注!
微信公众号搜 "程序精选"关注