为了账号安全,请及时绑定邮箱和手机立即绑定

如何存储重量值并转换为标准/公制重量?

如何存储重量值并转换为标准/公制重量?

慕斯709654 2021-06-10 16:05:08
我正在开发一个 Vue 应用程序,其中一项功能处理权重值。我目前将它们以克的形式存储在我的数据库中,然后将它们转换为磅。最终,我希望能够让用户在公制和标准计算之间进行选择。我创建了一个返回四个计算的函数,但是它们似乎没有正确加起来。export const convertToPounds = weight => {  return (Math.round((weight / 453.592) * 10) / 10).toFixed(2);};此函数运行四次。一次是总数,三次是基于项目过滤到的类别。Total - 4170 grams converts to 9.20 lbsValueA - 2700 grams converts to 6.00 lbsValueB - 1400 grams converts to 3.10 lbsValueC - 70 grams converts to 0.20 lbs不过,看看最终的转换,这三个值加起来是 9.30,而不是应该返回的 9.20。我的问题是转换方法是否太不准确,无法处理这些类型的转换?或者以克为单位存储重量不是处理这种情况的最佳方式?
查看完整描述

3 回答

?
收到一只叮咚

TA贡献1821条经验 获得超4个赞

渴望评论:


像这样的确切数字9.20是不可能的。它们是二进制四舍五入到最接近的可能数字,这里是9.19999999999999929。这就是原因,它toFixed()返回一个字符串而不是一个数字。


此处作为答案提供的函数或表达式也无济于事:


value = Math.round(value * Math.pow(10, decimals)) / Math.pow(10, decimals);

如果你通过console.log(value.toPrecision(18))你看到的结果证明,函数失败了。所有返回数字的舍入函数都将失败。


为什么toPrecision(18)?浮点数通常实现为 IEEE 754。JavaScript 使用double floats大约 16 位十进制数字。所以 18 位数字是内部数字的非常精确的十进制表示。


最后说明:toFixed()仅用于最终印刷。


查看完整回答
反对 回复 2021-06-11
  • 3 回答
  • 0 关注
  • 154 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信