JavaScript将float显示为2位小数

ale*_*lex 288 javascript floating-point precision

我想显示一个2位小数的数字.

我以为我可以toPrecision(2)在JavaScript中使用.

但是,如果数字是0.05,我得到0.0500.我宁愿保持不变.

JSbin上看到它.

做这个的最好方式是什么?

我可以考虑编写一些解决方案,但我想(我希望)内置这样的东西?

Jas*_*ary 497

float_num.toFixed(2);
Run Code Online (Sandbox Code Playgroud)

注意:toFixed()如果需要,将使用零填充或填充以满足指定的长度.

  • 但它返回字符串,而不是浮动! (50认同)
  • 问题作者想要"显示"它,所以字符串是完美的 (27认同)
  • 并且您始终可以使用parseFloat(float_num.toFixed(2))将字符串转换回float,同时仅保留两位小数. (4认同)
  • @anwar你不能可靠地围绕一个浮子(可以说你可以完全围绕一个浮子) - 你会得到像0.0500甚至0.0500000000001.见http://floating-point-gui.de/ (3认同)
  • @Hankrecords 你说的不是真的。如果我有 '43.01' 并且我 parseFloat 然后我得到 43.01 但如果我有 '43.10' 我会得到 43.1 :D 不是我想要的。 (2认同)

Eli*_*ria 48

你可以用这个toFixed功能来做,但它在IE中有问题.如果您需要可靠的解决方案,请在此处查看我的答案.

  • 应该开发技术而不是适应IE ...(顺便说一句,节点js`floland_num.toFixed(2);`工作正常) (24认同)
  • IE昨天死了.. (5认同)

小智 43

您可以toFixed像这样设置小数点长度:

let number = 6.1234
number.toFixed(2) // '6.12'
Run Code Online (Sandbox Code Playgroud)

toFixed返回一个字符串,如果根本number没有小数点,它会添加多余的零。

let number = 6
number.toFixed(2) // '6.00'
Run Code Online (Sandbox Code Playgroud)

为了避免这种情况,您必须将结果转换为数字。你可以用这两种方法来做到这一点:

let number1 = 6
let number2 = 6.1234

// method 1
parseFloat(number1.toFixed(2)) // 6
parseFloat(number2.toFixed(2)) // 6.12

// method 2
+number1.toFixed(2) // 6
+number2.toFixed(2) // 6.12
Run Code Online (Sandbox Code Playgroud)


cas*_*nca 19

尝试toFixed而不是toPrecision.


pan*_*nos 13

不知道我是怎么回答这个问题的,但是即使问了很多年,我想添加一个快速简单的方法,我也不会让我失望:

var num = response_from_a_function_or_something();

var fixedNum = parseFloat(num).toFixed( 2 );
Run Code Online (Sandbox Code Playgroud)

  • 在某些情况下,当我从一个元素中获取一些带有jquery的"data-"属性值时,如果我只使用toFixed,则会产生错误.parseFloat修复它. (3认同)
  • 为什么在那里`parseFloat()`?仅当数字来自字符串时才应使用它。 (2认同)
  • 是的,这就是我上面*的意思,如果它来自字符串*。但是使用它总是一个坏建议。 (2认同)

小智 13

如果你需要 2 位数字而不是字符串类型,我就用这种方法。

    const exFloat = 3.14159265359;
    
    console.log(parseFloat(exFloat.toFixed(2)));
Run Code Online (Sandbox Code Playgroud)


Huy*_*yen 9

function round(value, decimals) { return Number(Math.round(value+'e'+decimals)+'e-'+decimals); }

四舍五入(1.005,2); //返回1.01

四舍五入(1.004,2); //返回1而不是1.00

答案是通过以下链接进行的:http : //www.jacklmoore.com/notes/rounding-in-javascript/


rnm*_*one 6

number.parseFloat(2) works but it returns a string.

If you'd like to preserve it as a number type you can use:

Math.round(number * 100) / 100


Geo*_* B. 5

你可以尝试混合Number()toFixed()

将您的目标数字转换为带有 X 位数字的漂亮字符串,然后将格式化的字符串转换为数字。

Number( (myVar).toFixed(2) )


请参阅下面的示例:

var myNumber = 5.01;
var multiplier = 5;
$('#actionButton').on('click', function() {
  $('#message').text( myNumber * multiplier );
});

$('#actionButton2').on('click', function() {
  $('#message').text( Number( (myNumber * multiplier).toFixed(2) ) );
});
Run Code Online (Sandbox Code Playgroud)
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.4.1/jquery.min.js"></script>
<button id="actionButton">Weird numbers</button>
<button id="actionButton2">Nice numbers</button>

<div id="message"></div>
Run Code Online (Sandbox Code Playgroud)