[英]convert a negative number to positive without affecting decimal points in js
我需要将负数转换为正数。 我的尝试如下。
Math.abs(-4.0);
它将返回 4 作为答案。 但我需要 4.0 作为答案。 这里我不知道要设置的小数位。 对于不同的数字,有不同的小数点值。 实际上,这完全取决于网络套接字输出。 服务端根据输入的值定义了不同的浮点数,按照我们的要求没有任何模式。
那么在js中,有没有更好的方法来处理这个而不单独获得小数位?
正如其他评论中提到的,您将无法保持精度。 toFixed()
绝对不是一个解决方案,这个问题有有效的案例场景。
我们不得不做一些类似的事情,老师会输入一个成绩 (90.05),并希望在一个成绩簿中为所有学生保留相同的小数位数。 老师根据情况不同评分:
Teacher A | Teacher B | Teacher C
90 90.5 4.95
80 88.5 3.80
75 80.0 5.00
解决此问题的一种方法,尤其是当请求以字符串形式出现时(来自输入、http 请求等),是将数字保持为字符串并返回字符串值。
请注意,这是一个非常粗略的实现(我们的实现更安全),但想法很简单:
function absString(n) { numberString = n.toString(); if (numberString[0] === '-') { return numberString.substring(1); } else { return numberString; } } console.log(absString('-1')); console.log(absString('-2.0')); console.log(absString('2.0')); console.log(absString('-0.57'));
您可以使用数字toFixed
方法如下:
var decimalPlaces = 5 // Change this to change the number of decimals console.log(Math.abs(-4.0).toFixed(decimalPlaces))
如果这仅用于显示目的,您可以使用Intl.NumberFormat对象适当地设置您的值的格式。 例子:
Intl.NumberFormat(
undefined,
{ signDisplay: 'never', minimumSignificantDigits: 3, maximumSignificantDigits: 20 }
).format(-4.06364635454000); // "4.06364635454"
Intl.NumberFormat(
undefined,
{ signDisplay: 'never', minimumSignificantDigits: 1, maximumSignificantDigits: 20 }
).format(-4.0); // "4"
Intl.NumberFormat(
undefined,
{ signDisplay: 'never', style: 'currency', currency: 'EUR' }
).format(-4.06364635454000); // "€4.06"
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.