Tôi có kết quả của một phép chia và tôi muốn loại bỏ phần thập phân của số kết quả.
Tôi có thể làm cái này như thế nào?
Tôi có kết quả của một phép chia và tôi muốn loại bỏ phần thập phân của số kết quả.
Tôi có thể làm cái này như thế nào?
Câu trả lời:
Bạn đã có thể sử dụng...
Math.trunc() (cắt phần phân đoạn, cũng xem bên dưới)Math.floor() (làm tròn xuống)Math.ceil() (làm tròn lên) Math.round() (làm tròn đến số nguyên gần nhất)... phụ thuộc vào cách bạn muốn xóa số thập phân.
Math.trunc()chưa được hỗ trợ trên tất cả các nền tảng (cụ thể là IE), nhưng bạn có thể dễ dàng sử dụng một polyfill trong thời gian này.
Một phương pháp cắt ngắn phần phân đoạn với sự hỗ trợ nền tảng tuyệt vời là sử dụng toán tử bitwise (.eg |0). Tác dụng phụ của việc sử dụng toán tử bitwise trên một số là nó sẽ coi toán hạng của nó là số nguyên 32 bit đã ký, do đó loại bỏ thành phần phân số. Hãy nhớ rằng điều này cũng sẽ mang số lượng lớn hơn 32 bit.
Bạn cũng có thể nói về sự không chính xác của làm tròn số thập phân với số học dấu phẩy động.
Yêu cầu đọc - Điều mà mọi nhà khoa học máy tính nên biết về số học dấu phẩy động .
> (2.305*100)|0 > 230 > (2.3*100)|0 > 229
2.3*100javascript là 229.99999999999997, vì vậy có vẻ như toán tử bitwise đang thực hiện đúng công việc của nó trong ví dụ của bạn.
|0sử dụng số nguyên 64 bit không?
Bạn cũng có thể sử dụng các toán tử bitwise để cắt bớt số thập phân.
ví dụ
var x = 9 / 2;
console.log(x); // 4.5
x = ~~x;
console.log(x); // 4
x = -3.7
console.log(~~x) // -3
console.log(x | 0) // -3
console.log(x << 0) // -3
Các phép toán bitwise hiệu quả hơn đáng kể so với các hàm Math. Các đôi điều hành không Bitwise cũng có vẻ hơi tốt hơn các x | 0và x << 0Bitwise hoạt động bởi một lượng không đáng kể.
// 952 milliseconds
for (var i = 0; i < 1000000; i++) {
(i * 0.5) | 0;
}
// 1150 milliseconds
for (var i = 0; i < 1000000; i++) {
(i * 0.5) << 0;
}
// 1284 milliseconds
for (var i = 0; i < 1000000; i++) {
Math.trunc(i * 0.5);
}
// 939 milliseconds
for (var i = 0; i < 1000000; i++) {
~~(i * 0.5);
}
Cũng đáng chú ý là toán tử bitwise không được ưu tiên hơn các phép toán số học, do đó bạn có thể cần phải bao quanh các phép tính với dấu ngoặc đơn để có kết quả như mong muốn:
x = -3.7
console.log(~~x * 2) // -6
console.log(x * 2 | 0) // -7
console.log(x * 2 << 0) // -7
console.log(~~(x * 2)) // -7
console.log(x * 2 | 0) // -7
console.log(x * 2 << 0) // -7
Thông tin thêm về toán tử đôi bitwise không có thể được tìm thấy tại Double bitwise KHÔNG (~ ~)
Bạn cũng có thể làm
parseInt(a/b)
parseIntsẽ không hoạt động đáng tin cậy cho số lượng lớn, bởi vì nó hoạt động bằng cách trước tiên chuyển đổi đối số của nó thành một chuỗi và đối với số lượng lớn, kết quả sẽ sử dụng ký hiệu số mũ. Ví dụ: var n = 22222222222222222222222; parseInt(n);sẽ trả về 2, vì n.toString()trả về 2.2222222222222223e+22.
parseInt()cho mục đích của nó, đó là lấy một số trong một chuỗi và trả về a Number.
u cũng có thể hiển thị một số chữ số nhất định sau dấu thập phân (ở đây là 2 chữ số) bằng cách sử dụng mã sau:
var num = (15.46974).toFixed(2)
console.log(num) // 15.47
console.log(typeof num) // string
Sử dụng Math.round()chức năng.
Math.round(65.98) // will return 66
Math.round(65.28) // will return 65
$.round = Math.round;)
Sử dụng Math.round().
(Câu trả lời của Alex là tốt hơn; tôi đã đưa ra một giả định :)
Với ES2015, Math.trunc () khả dụng.
Math.trunc(2.3) // 2
Math.trunc(-2.3) // -2
Math.trunc(22222222222222222222222.3) // 2.2222222222222223e+22
Math.trunc("2.3") // 2
Math.trunc("two") // NaN
Math.trunc(NaN) // NaN
Nó không được hỗ trợ trong IE11 trở xuống, nhưng hoạt động trong Edge và mọi trình duyệt hiện đại khác.
Math.trunc(value * Math.pow(10,x)) / Math.pow(10,x)sẽ làm việc?
value = 2.3và x = 2sẽ trở lại 2.29. Tôi không có một đề nghị tốt hơn.
Nếu bạn không quan tâm đến việc chia sẻ, chỉ cần chuyển đổi số thành chuỗi, sau đó xóa mọi thứ sau khoảng thời gian bao gồm cả khoảng thời gian. Điều này hoạt động cho dù có một số thập phân hay không.
const sEpoch = ((+new Date()) / 1000).toString();
const formattedEpoch = sEpoch.split('.')[0];
toFixed sẽ hoạt động như vòng.
Đối với sàn như hành vi sử dụng%:
var num = 3.834234;
var floored_num = num - (num % 1); // floored_num will be 3
Dưới đây là phần nén trong phần giải thích chi tiết với sự trợ giúp của các bài viết trên:
1. Math.trunc (): Nó được sử dụng để loại bỏ các chữ số được theo sau bởi dấu chấm. Nó chuyển đổi ngầm. Nhưng, không được hỗ trợ trong IE.
Thí dụ:
Toán.trunc (10.5) // 10
Toán.trunc (-10,5) // -10
Cách khác: Sử dụng toán tử bitwise not:
Thí dụ:
x = 5,5
~ ~ x // 5
2. Math.floor (): Nó được sử dụng để đưa ra giá trị nguyên tối thiểu có thể nhìn thấy được. Nó được hỗ trợ trong tất cả các trình duyệt.
Thí dụ:
Math.floor (10.5) // 10
Toán.floor (-10,5) // -11
3. Math.ceil (): Nó được sử dụng để đưa ra giá trị nguyên cao nhất có thể. Nó được hỗ trợ trong tất cả các trình duyệt.
Thí dụ:
Math.ceil (10.5) // 11
Toán.ceil (-10,5) // -10
4. Math.round (): Nó được làm tròn đến số nguyên gần nhất. Nó được hỗ trợ trong tất cả các trình duyệt.
Thí dụ:
Math.round (10.5) // 11
Math.round (-10.5) // -10
Math.round (10,49) // 10
Math.round (-10.51) // -11
Điều này dành cho những người muốn ngăn người dùng nhập số thập phân
<input id="myInput" onkeyup="doSomething()" type="number" />
<script>
function doSomething() {
var intNum = $('#myInput').val();
if (!Number.isInteger(intNum)) {
intNum = Math.round(intNum);
}
console.log(intNum);
}
</script>
Bạn có thể sử dụng .toFixed (0) để xóa phần thập phân hoàn chỉnh hoặc cung cấp số trong các đối số mà bạn muốn số thập phân được cắt bớt.
Lưu ý: toFixed sẽ chuyển đổi số thành chuỗi.
Ví dụ:
var x = 9.656;
x.toFixed(0); // returns 10
x.toFixed(2); // returns 9.66
x.toFixed(4); // returns 9.6560
x.toFixed(6); // returns 9.656000
hoặc là
parseInt("10"); // returns 10
parseInt("10.33"); // returns 10
parseInt("10 20 30"); // returns 10
parseInt("10 years"); // returns 10
parseInt("years 10"); // returns NaN
Math.floor()sẽ tăng giá trị số khi số âm . Do đó,Math.floor(-1.2) -> -2trong khiMath.floor(1.2) -> 1.parseInt(-1.2) -> -1( như được đề cập bởi @FloydPink ) sẽ loại bỏ phần thập phân như mong đợi cho cả số dương và số âm .