繁体   English   中英

将负数转换为正数而不影响js中的小数点

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM