Tôi có một câu hỏi liên quan đến hàm toFixed(). Nếu tôi có một phao, ví dụ: - 3.123123423 và . Làm thế nào tôi có thể xuất nó vào hộp đầu vào với toFixed (2) để các giá trị inputbox sẽ là 3.12 và . Ý tôi là nếu giá trị là số nguyên Tôi muốn đầu ra nó mà không trailing .00 :)Chức năng Javascript toFixed
Trả lời
Vì không có sự khác biệt giữa số nguyên và nổi trong JavaScript, đây là cách tiếp cận quick'n'dirty tôi:
theNumber.toFixed(2).replace(".00", "");
Hoặc một cái gì đó chung chung:
myToFixed = function (n, digits) {
digits = digits || 0;
return n.toFixed(digits).replace(new RegExp("\\.0{" + digits + "}"), "");
}
myToFixed(32.1212, 2) --> "32.12"
myToFixed(32.1212, 0) --> "32"
myToFixed(32, 2) --> "32"
myToFixed(32.1, 2) --> "32.10"
Rất bẩn (và rất nhanh chóng.) ... +1 –
Không hoạt động cho 3.005 (ngụ ý nó là một số nguyên). – Mark
function toFixed0d(x, d)
{
if(Math.round(x) == x)
{
return x.toString();
}else
{
return x.toFixed(d);
}
}
toFixed0d(3.123123423, 2) = "3.12"
toFixed0d(0, 2) = "0"
Bạn không cần Math.round():
var toFixed = function(val, n) {
var result = val.toFixed(n);
if (result == val)
return val.toString();
return result;
}
toFixed(3.123, 2) --> "3.12"
toFixed(3, 2) --> "3"
Lưu ý rằng toFixed() là broken in IE và thường không được dựa vào. Các chức năng thay thế được làm tròn nhưng gây khó chịu ở đó.
Kết quả có thể thay đổi trong trường hợp các trình duyệt khác. Vì vậy, xin vui lòng xem liên kết này How to write a prototype for Number.toFixed in JavaScript?
Đây là một chức năng tôi đã đưa ra sau khi suy nghĩ về vấn đề này tương tự cho một thời gian ngắn:
function toFixed (number, n) {
return parseFloat(number.toFixed(n));
}
Theo câu hỏi này, chức năng này sẽ trở lại như sau:
toFixed(3.123123423, 2);
> 3.12
toFixed(0, 2);
> 0
toFixed(3.1, 2);
> 3.1
toFixed(3.005, 2);
> 3
toFixed(3.005, 3);
> 3.005
toFixed(3.0500, 4);
> 3.05
Lưu ý rằng phương thức toFixed
của đối tượng Number
của JavaScript thực sự trả lại String
. Hàm toFixed
ở trên sẽ trả lại Number
. Nếu bạn muốn có một String
sau đó sử dụng lệnh sau:
function toFixed (number, n) {
return parseFloat(number.toFixed(n)).toString();
}
Number.toFixed sản xuất một số kết quả về mặt toán học kỳ lạ và mang đến cho bạn các chữ số phân đoạn mà bạn yêu cầu, cho dù bạn cần đến chúng hay không.
Math.round là toán học đúng, nhưng không cho phép bạn chỉ định độ chính xác.
Đây là một hàm có cả toán học chính xác (bỏ qua các lỗi dấu phẩy động) và cung cấp cho bạn những gì bạn muốn.
var roundToPlusInfinity = function(n, fd) {
var scale = Math.pow(10, fd),
rounded = fd ? Math.floor((n * scale + 0.5))/scale :
Math.round(n);
return rounded.toString();
};
Thuật toán là: mở rộng quy mô để các chữ số bạn muốn là ở bên trái dấu thập phân, thêm 0,5 (do đó> = 0,5 ở nơi không đáng kể đầu tiên gây ra sự tăng của phần nguyên), cắt ngắn (không tròn) và thu nhỏ lại. Có tiềm năng cho các lỗi dấu phẩy động để leo vào, nhưng đó là một cảnh tốt hơn so với hàm toFixed không may.
Kiểm tra nó ra:
roundToPlusInfinity(5.53335, 4); // "5.3334"
roundToPlusInfinity(-9999.95, 1); // "-9999.9"
roundToPlusInfinity(3.00015, 3); // "3"
Do khả năng lỗi dấu chấm động, xuống quy mô có thể cung cấp một kết quả như "3,00000000001", đó là gây phiền nhiễu. Một cái gì đó như thế này nên chăm sóc nó.
var trimFraction = function(s, fd) {
var splitPoint = s.indexOf('.');
if (splitPoint === -1) {
return s;
}
var f = s.substring(splitPoint + 1, s.length),
i = s.substring(0, splitPoint);
if (f.length > fd) {
f = f.substring(0, fd).replace(/0+$/, "");
}
if (f) {
return i + '.' + f;
}
return i;
};
trimFraction("3.1000000001", 2); // "3.1"
Bạn chưa làm rõ thuật toán làm tròn bạn muốn. Vòng theo hướng cộng với vô cùng là làm tròn mà bạn đã học ở trường nơi bạn làm tròn> = .5 lên (tức là hướng tới cực dương). Tôi tin rằng trong kế toán, thuật toán làm tròn chính xác (bên ngoài Thụy Sĩ và Argentina ít nhất) là từ số không. Đơn giản:
var roundAwayFromZero = function(n, fd) {
var ret = roundToPlusInfinity(Math.abs(n), fd);
return (n < 0) ? '-' + ret : ret;
};
roundAwayFromZero(-9999.95, 1); // "-10000"
Nếu kết quả là để trình bày của con người, Intl.NumberFormat là một khả năng, vì bạn có thể chỉ định số lượng tối thiểu và tối đa các chữ số thập phân. Tại thời điểm viết, nó không được hỗ trợ chính xác rộng rãi và giả sử Chrome triển khai đúng đặc điểm kỹ thuật, sử dụng cùng một thuật toán cắt ngắn sai và không thể hiểu được như toFixed. Thật thú vị, phong cách "tiền tệ" sử dụng roundAwayFromZero (hoặc làm tròn đến một nửa nếu mã tiền tệ là "CHF", đó là một liên lạc tốt đẹp).
- 1. Javascript toFixed() chức năng
- 2. Javascript toFixed được bản địa hóa?
- 3. Javascript toFixed tương đương trong java
- 4. toFixed trong C#
- 5. chức năng Javascript móc
- 6. javascript chức năng inArray
- 7. Chức năng getCookie Javascript
- 8. console.log javascript [Chức năng]
- 9. Javascript addEventListener chức năng
- 10. javascript: Re-gán một chức năng với chức năng khác
- 11. chức năng dụ Javascript so với chức năng nguyên mẫu
- 12. nếu chức năng không tồn tại ghi chức năng - javascript
- 13. Javascript tìm chức năng gọi
- 14. javascript chức năng phạm vi
- 15. chức năng rỗng trong Javascript
- 16. JavaScript chức năng tự gọi
- 17. Chức năng riêng trong JavaScript
- 18. javascript chức năng kiểm tra
- 19. Javascript: Tên chức năng động
- 20. submit_tag với chức năng javascript
- 21. Chức năng gọi thành viên của số
- 22. Chức năng setTimeout của Javascript không gọi
- 23. Chức năng Javascript Focus() không hoạt động
- 24. Gọi chức năng Javascript từ Silverlight
- 25. Thuật toán của JavaScript "sort()" Chức năng
- 26. Chức năng Javascript bên trong document.ready
- 27. javascript: Đang chuyển các chức năng
- 28. Javascript encodeURI như chức năng trong postgresql?
- 29. Sơ đồ cho các chức năng JavaScript
- 30. Chức năng JavaScript định nghĩa lại
Bạn có thể muốn chỉ định những gì bạn muốn xảy ra trong 3.1 và 3.005. – Mark
làm thế nào về 'parseFloat ((giá trị) .toFixed (2))' –