在我的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)
答案 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)