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

我正在开发一个 Vue 应用程序,其中一项功能处理权重值。我目前将它们以克的形式存储在我的数据库中,然后将它们转换为磅。最终,我希望能够让用户在公制和标准计算之间进行选择。我创建了一个返回四个计算的函数,但是它们似乎没有正确加起来。


export const convertToPounds = weight => {

  return (Math.round((weight / 453.592) * 10) / 10).toFixed(2);

};

此函数运行四次。一次是总数,三次是基于项目过滤到的类别。


Total - 4170 grams converts to 9.20 lbs

ValueA - 2700 grams converts to 6.00 lbs

ValueB - 1400 grams converts to 3.10 lbs

ValueC - 70 grams converts to 0.20 lbs

不过,看看最终的转换,这三个值加起来是 9.30,而不是应该返回的 9.20。


我的问题是转换方法是否太不准确,无法处理这些类型的转换?或者以克为单位存储重量不是处理这种情况的最佳方式?


慕斯709654
浏览 155回答 3
3回答

收到一只叮咚

渴望评论:像这样的确切数字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()仅用于最终印刷。
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

JavaScript