如何在JavaScript中将数字从字符串转换为带有零的浮点数?

时间:2019-05-16 07:58:03

标签: javascript reactjs

在我的react应用程序中,我从API收到一个字符串形式的费用(例如990.00)。我将其存储在具有排序功能的材料UI表中。要对费用进行排序,应采用数字格式。我正在使用toFloat()将其转换为数字,但是我只有900。如果将其修改为toFloat()。toFixed(2),它将再次转换为字符串。如果我将其修改为toFloat()。round(2),则完全没有输出。

const routes: Routes = [
    {
        path: 'startsite',
        component: StartsiteComponent,
        outlet: 'start'
    }
];

@NgModule({
    imports: [RouterModule.forChild(routes)],
    exports: [RouterModule]
})
export class StartsiteRoute {}

如何获取类型为-后跟十进制数字的数字?

以下是排序方法:

var cost = '900.00'
var numericCost = toFloat(cost) //type - number but no decimal zeros
var numericCost = toFloat(cost).toFixed(2) //type - string, so can't sort it
var numericCost = toFloat(cost).round(2) //no output (can't see the data)

3 个答案:

答案 0 :(得分:0)

所以我将重新格式化我的答案,toFixed总是返回一个字符串数字,因为在javascript中,小数点不能在二进制浮点系统中完全准确地表示,例如10.2实际上是10.2 ........ (小数点后的许多数字)

为了固定,我们将数字的一部分切成字符串,以便精确地给出我们想要的结果。

要解决此问题,您需要创建自己的函数,下面是一个可帮助您的链接:https://exoboy.wordpress.com/2011/07/14/the-problems-with-tofixed-in-javascript/

您将需要以下代码:(我不是从我提到的链接中获得的代码的所有者)

function getUsers(req, res){
  const { User, pages } = userService.getUsers({
    page_no:req.body.page_no,
    previous:req.body.previous
  })
  // Call the then User which is a Promise
  User.then(data => res.send(data))
};

因此要调用此函数,您只需使用num.trimNum(place,rounding);即可。 位数是小数点后的位数,四舍五入是一个字符串值(“ round” /“ ceil” /“ floor”)

这将在大多数情况下解决您的问题,但在您的情况下为“ 999.00”时,它仍会显示999,但不会影响结果,因为999和999.00将具有相同的结果

答案 1 :(得分:0)

您要解决的核心问题是按数字的某个版本(一个数字值)进行排序,然后显示另一个版本(一个具有定义的精度的字符串)。解决方案是将这两个问题分开,这样您就不会使用相同的值来进行排序和显示:

render() {
  let data = this.props.data.sort((a, b) => {
    // This is the sorting function, so we need to treat the values as a number
    return toFloat(a.cost) - toFloat(b.cost);
  });

  return data.map(n => {
    // Now we're showing the data, so treat it as a string
    // It's already a string fetched from the API in the format needed, so just use directly
    return (
      <TableRow key={n.id}>
        <TableCell>{n.cost}</TableCell>
      </TableRow>
    );
  });
}

答案 2 :(得分:-1)

尝试一下:

var cost = '900.00'
var numericCost = parseFloat(cost).toFixed(2)