在javascript中使用小数
Working with decimals in javascript
本文关键字:小数 javascript 更新时间:2023-09-26
我有一个javascript函数,它将英尺转换为一个可用的对象,该对象将获取总英尺并将其分解为英尺/英寸/分数。
在下面的例子中,小数部分应该是零,我的英寸应该是4
假设我有以下内容。
var inches = 40;
现在,当我像unPackDecimalFeet(40/12)那样调用下面的函数时;
unPackDecimalFeet: function (feetInchFraction) {
var inchFraction = (feetInchFraction - ~~feetInchFraction) * 12;
return {
feet: ~~feetInchFraction,
inch: ~~inchFraction,
fraction: inchFraction - ~~inchFraction
};
}
我的返回值如下。
feet: 3
fraction: 0.9999999999999964
inch: 3
**上面的返回值应为。
feet: 3
fraction: 0
inch: 4
我需要如何处理脚部,以便获得正确的返回值?
一开始我会说把它乘以1000
,然后进行计算,然后除以1000
。IEEE浮点运算就是这里的问题。如果您需要更多的计算,请查看BigInteger库。(BigInt,有时)
var inchesIn;
inchesIn = 40;
document.writeln('Feet: ' + Math.floor(inchesIn/12));
document.writeln('Inches: ' + inchesIn%12);
您在代码中做了很多工作,试图从微不足道的分数问题中拯救自己。我认为也许更简单越好:
unPackDecimalFeet : (function (feet) {
var flooredFeet = 0 | feet,
flooredInches = 0 | ((feet - flooredFeet) * 12),
inchFraction = (feet * 12) - (0 | (feet * 12));
return {
feet: flooredFeet,
inch: flooredInches,
fraction: +(inchFraction.toFixed(2)) //Rounded to two decimals
};
})
唯一的"棘手之处"是0 |
作为Math.floor()
的替代方案。如果Math.floor()
能让您对可维护性感觉更好,请随意使用它。此外,我将响应的"分数"部分四舍五入到最接近的100分之一英寸。如果你愿意,你可以更精确地舍入,但鼓励进行一些舍入,以防止像0.9999999999999994
或其他由于IEEE-754而变得疯狂的东西。
相关文章:
- 用于Javascript中小数输入的Regex,小数前有1到3位,小数后有1到三位
- 在javascript中使用小数
- 正则表达式,不允许在javascript中使用负数和小数以及零
- 用于输入文本字段的Javascript验证器,仅用于两位小数
- JavaScript 是否考虑了本地小数分隔符
- 浮点数的总和在 JavaScript 中没有给出小数
- 删除Javascript中小数后的数字
- 用Javascript替换数字's小数
- JavaScript从我的小数中去除了.00
- JavaScript打印的数字有20位小数
- Javascript-格式化数字,始终显示原始的小数位数
- 使用javascript查找小数前的整数(不包括特殊字符)
- 如何通过 javascript 在浮点数中保留小数点数后的 2 位数字
- 如何在javascript中使用小数
- 在Javascript中,大浮点数的小数位数有限制吗
- 如何在使用 JavaScript 四舍五入小数时忽略 “”,“
- 如何在javascript中将小数转换为帧速率指定
- 向下舍入小数 JavaScript
- 需要帮助进位小数Javascript
- 格式化小数javascript/jquery