JS는 PHP 함수 number_format에 해당하는 것은 무엇입니까?
PHP 기능:
function formatNumberForDisplay($number, $decimal=0, $decimalSeperator='.', $numberSeperator=',')
{
return number_format($number, $decimal, $decimalSeperator, $numberSeperator);
}
jQuery/JavaScript와 동등한 기능을 제안해 주실 수 있습니까?
js의 number_format과 동일한 값을 여기서 찾을 수 있습니다.
function number_format (number, decimals, dec_point, thousands_sep) {
// Strip all characters but numerical ones.
number = (number + '').replace(/[^0-9+\-Ee.]/g, '');
var n = !isFinite(+number) ? 0 : +number,
prec = !isFinite(+decimals) ? 0 : Math.abs(decimals),
sep = (typeof thousands_sep === 'undefined') ? ',' : thousands_sep,
dec = (typeof dec_point === 'undefined') ? '.' : dec_point,
s = '',
toFixedFix = function (n, prec) {
var k = Math.pow(10, prec);
return '' + Math.round(n * k) / k;
};
// Fix for IE parseFloat(0.55).toFixed(0) = 0;
s = (prec ? toFixedFix(n, prec) : '' + Math.round(n)).split('.');
if (s[0].length > 3) {
s[0] = s[0].replace(/\B(?=(?:\d{3})+(?!\d))/g, sep);
}
if ((s[1] || '').length < prec) {
s[1] = s[1] || '';
s[1] += new Array(prec - s[1].length + 1).join('0');
}
return s.join(dec);
}
그냥 사용하다toLocaleString
정수 오브젝트 위에 있습니다.
let x = 1234567;
//if x is a string/non-number, use parseInt/parseFloat to convert to a number. Thanks @Aleksandr Kopelevich
x.toLocaleString('us', {minimumFractionDigits: 2, maximumFractionDigits: 2})
이게 당신이 원하는 건가요?
yourFloatVarHere.toFixed(2);
울다
네이티브 "Intl" 객체 접근법:
var amount = 5000.25;
var locale = 'de';
var options = {style: 'currency', currency: 'eur', minimumFractionDigits: 2, maximumFractionDigits: 2};
var formatter = new Intl.NumberFormat(locale, options);
console.log(formatter.format(amount));
http://jsfiddle.net/arturrelax/sa9jL138/1/
상세한 것에 대하여는, https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Intl 를 참조해 주세요.
오래된 스레드인 것은 알지만, 순수한 Javascript로 되어 있는 나만의 기능을 만들었습니다.
심플한 솔루션
이것은 유한한 수로 잘 동작합니다.
function number_format(number, decimals, dec_point, thousands_point) {
if (number == null || !isFinite(number)) {
throw new TypeError("number is not valid");
}
if (!decimals) {
var len = number.toString().split('.').length;
decimals = len > 1 ? len : 0;
}
if (!dec_point) {
dec_point = '.';
}
if (!thousands_point) {
thousands_point = ',';
}
number = parseFloat(number).toFixed(decimals);
number = number.replace(".", dec_point);
var splitNum = number.split(dec_point);
splitNum[0] = splitNum[0].replace(/\B(?=(\d{3})+(?!\d))/g, thousands_point);
number = splitNum.join(dec_point);
return number;
}
복잡한 솔루션
이렇게 하면 큰 숫자로 문제를 해결할 수 있습니다.
https://gist.github.com/VassilisPallas/d73632e9de4794b7dd10b7408f7948e8
const splitThousands = (number) => (dec_point, thousands_point) => {
const splitNum = number.toString().split(dec_point);
splitNum[0] = splitNum[0].replace(/\B(?=(\d{3})+(?!\d))/g, thousands_point);
return splitNum.join(dec_point);
};
const isBigNumber = (number) => number.toString().includes("e");
const isBigFloat = (number) => number.toString().includes("-");
const calcTrailing = (dec, len) => Number(dec) + 2 - len;
const handleBigFloats = (number, decimals) => {
if (!decimals) {
return "0";
}
const [numbers, dec] = number.toString().replace(".", "").split("e-");
const trailingZeros = calcTrailing(dec, numbers.length);
const res = `${"0.".padEnd(trailingZeros + 2, "0")}${numbers}`;
return decimals ? res.substring(0, 2) + res.substring(2, decimals + 2) : res;
};
const handleBigNumbers = (number, decimals, dec_point, thousands_point) => {
if (isBigFloat(number)) {
return handleBigFloats(number, decimals);
}
return splitThousands(BigInt(number))(dec_point, thousands_point);
};
function handleFiniteNumbers(number, decimals, dec_point, thousands_point) {
if (!isFinite(number)) {
throw new TypeError("number is not finite number");
}
if (!decimals) {
const len = number.toString().split(".").length;
decimals = len > 1 ? len : 0;
}
return splitThousands(
parseFloat(number).toFixed(decimals).replace(".", dec_point)
)(dec_point, thousands_point);
}
const numberFormat = (
number,
decimals,
dec_point = ".",
thousands_point = ","
) => {
if (number == null || typeof number !== "number") {
throw new TypeError("number is not valid");
}
if (isBigNumber(number)) {
return handleBigNumbers(number, decimals, dec_point, thousands_point);
}
return handleFiniteNumbers(number, decimals, dec_point, thousands_point);
};
https://jsfiddle.net/p2ft9n4v/1/
php에 가까운 함수number_format($number)
그래야 한다number.toLocaleString('en')
javascript의
여기 php와 동등한 동작을 하는 또 다른 짧은 솔루션이 있습니다.
function number_format(number,decimals,dec_point,thousands_sep) {
number = number*1;//makes sure `number` is numeric value
var str = number.toFixed(decimals?decimals:0).toString().split('.');
var parts = [];
for ( var i=str[0].length; i>0; i-=3 ) {
parts.unshift(str[0].substring(Math.max(0,i-3),i));
}
str[0] = parts.join(thousands_sep?thousands_sep:',');
return str.join(dec_point?dec_point:'.');
}
다음은 php의 number_format과 거의 동일한 결과를 얻기 위해 사용할 수 있는 간단한 함수입니다.
function number_format(user_input){
var filtered_number = user_input.replace(/[^0-9]/gi, '');
var length = filtered_number.length;
var breakpoint = 1;
var formated_number = '';
for(i = 1; i <= length; i++){
if(breakpoint > 3){
breakpoint = 1;
formated_number = ',' + formated_number;
}
var next_letter = i + 1;
formated_number = filtered_number.substring(length - i, length - (i - 1)) + formated_number;
breakpoint++;
}
return formated_number;
}
또 다른 방법은 ajax를 사용하여 php 스크립트를 호출하고, 여기서 number_format을 실행하고 문자열로 ajax를 사용하여 반환하는 것입니다.하지만 좀 지저분하다.
쉽지 않습니다. 다음과 같은 간단한 jquery-plugin을 사용해 보십시오.
JS 등가는 다음과 같습니다.
var number = //input value
parseFloat(number).toFixed(3);
이에 대한 나의 견해:
var number_format = function(num) {
stringNum = num.toString();
stringNum = stringNum.split("");
c = 0;
if (stringNum.length>3) {
for (i=stringNum.length; i>-1; i--) {
if ( (c==3) && ((stringNum.length-i)!=stringNum.length) ) {
stringNum.splice(i, 0, ",");
c=0;
}
c++
}
return stringNum;
}
return num;
}
$("body").append(number_format(100000000));
또 다른 노출 예로는 다음과 같습니다.
const numberFormat = (value, decimals, decPoint, thousandsSep) => {
decPoint = decPoint || '.';
decimals = decimals !== undefined ? decimals : 2;
thousandsSep = thousandsSep || ' ';
if (typeof value === 'string') {
value = parseFloat(value);
}
let result = value.toLocaleString('en-US', {
maximumFractionDigits: decimals,
minimumFractionDigits: decimals
});
let pieces = result.split('.');
pieces[0] = pieces[0].split(',').join(thousandsSep);
return pieces.join(decPoint);
};
JS 함수를 다음과 같이 호출하면 작동합니다.
var formattedNumber = number_format(value)
언급URL : https://stackoverflow.com/questions/12820312/what-is-the-js-equivalent-to-the-php-function-number-format
'itsource' 카테고리의 다른 글
innerText와 inner의 차이HTML과 가치? (0) | 2022.09.21 |
---|---|
업그레이드가 필요한 경우에만 서비스를 중지하는 적절한 방법 (0) | 2022.09.21 |
어떻게 자바에 문자를 보내기. (0) | 2022.09.21 |
Android를 통해 Google Maps Directions 실행 (0) | 2022.09.19 |
쿼리에서 MySQL은 ORDER BY 및 LIMIT을 어떻게 처리합니까? (0) | 2022.09.19 |