不四舍五入到五位数的 toFixed 方法
toFixed method without rounding to five digit
我有号码var x = 2.305185185185195;
x = x.toFixed(5);
x = 2.30519
但我要求不四舍五入,即 2.30518
我读了一些有两位小数的帖子,但找不到五位小数。
如有任何帮助,我们将不胜感激。
您可以使用适当的因子并将其取底,return除法的结果。
基本上这个解决方案将点向左移动 10^d 的一个因子并得到一个整数并将该值除以前一个因子以获得正确的数字。
function getFlooredFixed(v, d) {
return (Math.floor(v * Math.pow(10, d)) / Math.pow(10, d)).toFixed(d);
}
var x = 2.305185185185195;
document.write(getFlooredFixed(x, 5));
如果你只需要一个 "part" 的浮点数而不四舍五入,你可以 "cut" 它:
function cutNumber(number, digitsAfterDot) {
const str = `${number}`;
return str.slice(0, str.indexOf('.') + digitsAfterDot + 1);
}
const x = 2.305185185185195;
console.log(cutNumber(x, 5)); // 2.30518
此方法速度很快 (https://jsfiddle.net/93m8akzo/1/),并且其执行时间不依赖于 number
或 digitsAfterDot
值。
您还可以 "play around" 在给定 fiddle 中使用这两个函数,以便更好地理解它们的作用。
您可以在此处阅读有关 slice()
方法的更多信息 - MDN documentation
注意 这个函数只是一个例子,不要在生产应用中使用它。
您绝对应该添加输入值验证和错误处理!
The Math.trunc() function returns the integer part of a number by
removing any fractional digits
因此您可以将数字乘以 10^n,其中 n 是所需的精度数,使用 Math.trunc()
截断小数部分,除以相同的数字 (10^n) 并应用 toFixed()
对其进行格式化(例如为了获得 2.30 而不是 2.3 的形式)
var x = 2.305185185185195;
console.log((Math.trunc(x*100000)/100000).toFixed(5));
我已经整理出来了,如果小数点是5,就加上少量,然后像往常一样四舍五入:
<pre><code>function(value, decimals) {
var decimals = decimals || 2;
if( isNaN(value) ){ return 0; }
var decimalPart = value.toString().trim().split('.').pop(),
extra = decimalPart.substr(decimals, decimalPart.length - decimals);
if( extra == '5' &&
decimalPart.length > decimals
){
value = parseFloat(value) + (1 / ( Math.pow(10, decimals + 5) ) );
}
return Number( parseFloat( value ).toFixed( decimals ) );
}
我有号码var x = 2.305185185185195;
x = x.toFixed(5);
x = 2.30519
但我要求不四舍五入,即 2.30518
我读了一些有两位小数的帖子,但找不到五位小数。
如有任何帮助,我们将不胜感激。
您可以使用适当的因子并将其取底,return除法的结果。
基本上这个解决方案将点向左移动 10^d 的一个因子并得到一个整数并将该值除以前一个因子以获得正确的数字。
function getFlooredFixed(v, d) {
return (Math.floor(v * Math.pow(10, d)) / Math.pow(10, d)).toFixed(d);
}
var x = 2.305185185185195;
document.write(getFlooredFixed(x, 5));
如果你只需要一个 "part" 的浮点数而不四舍五入,你可以 "cut" 它:
function cutNumber(number, digitsAfterDot) {
const str = `${number}`;
return str.slice(0, str.indexOf('.') + digitsAfterDot + 1);
}
const x = 2.305185185185195;
console.log(cutNumber(x, 5)); // 2.30518
此方法速度很快 (https://jsfiddle.net/93m8akzo/1/),并且其执行时间不依赖于 number
或 digitsAfterDot
值。
您还可以 "play around" 在给定 fiddle 中使用这两个函数,以便更好地理解它们的作用。
您可以在此处阅读有关 slice()
方法的更多信息 - MDN documentation
注意 这个函数只是一个例子,不要在生产应用中使用它。 您绝对应该添加输入值验证和错误处理!
The Math.trunc() function returns the integer part of a number by removing any fractional digits
因此您可以将数字乘以 10^n,其中 n 是所需的精度数,使用 Math.trunc()
截断小数部分,除以相同的数字 (10^n) 并应用 toFixed()
对其进行格式化(例如为了获得 2.30 而不是 2.3 的形式)
var x = 2.305185185185195;
console.log((Math.trunc(x*100000)/100000).toFixed(5));
我已经整理出来了,如果小数点是5,就加上少量,然后像往常一样四舍五入:
<pre><code>function(value, decimals) {
var decimals = decimals || 2;
if( isNaN(value) ){ return 0; }
var decimalPart = value.toString().trim().split('.').pop(),
extra = decimalPart.substr(decimals, decimalPart.length - decimals);
if( extra == '5' &&
decimalPart.length > decimals
){
value = parseFloat(value) + (1 / ( Math.pow(10, decimals + 5) ) );
}
return Number( parseFloat( value ).toFixed( decimals ) );
}