이 페이지는 코딩도장 데이터의 읽기 전용 정적 보관본입니다.

숫자에 콤마 삽입하기

숫자 형태의 문자열을 콤마가 포함된 금액 표기식 문자열로 바꾸어주는 프로그램을 작성하시오.

※ 단, 프로그래밍 언어에서 지원하는 금액변환 라이브러리는 사용하지 말것

예)

숫자 금액
1000 1,000
20000000 20,000,000
-3245.24 -3,245.24

2014/02/16 12:47

pahkey

141개의 풀이가 있습니다.

재귀함수는 사랑입니다. 입력은 문자열로 받습니다.

python 3.5.0

def comma(n):
    if n[0] == '-':
        return '-' + comma(n[1:])
    if len(n) <= 3:
        return n
    if n.find('.') == -1:
        return comma(n[:-3]) + ',' + n[-3:]
    else:
        return comma(n[:n.find('.')]) + n[n.find('.'):]

2015/10/31 02:54

김 정우

정규식 써도 되나요?ㅎㅎ

function fnFormatComma(num) { 
    num = num + '';

    while( /(^[+-]?\d+)(\d{3})/.test(num) ) {
        num = num.replace(/(^[+-]?\d+)(\d{3})/, '$1'+','+'$2');
    }

    return num;
}

2014/02/17 14:19

김현빈

깔끔한 해법이네요 ^^ - pahkey, 2014/02/17 14:24
-3245.24는 안되네요. 기호에 대한 처리가 추가 되어야 할 것 같습니다. - Lee HoHoon, 2014/02/17 15:59
깜빡 했네요^^;; 수정 했습니다! - 김현빈, 2014/02/17 16:25

예전에 정규식 학습하면서 풀었던 퀴즈 문제의 답을 여기서 쓰네요^^

14개풀고 진행 못해서 잠시 접어둔 상태인데~ 혹시 정규식 공부하실분을 위해서 링크 남깁니다.

정규식퀴즈사이트:http://regex101.com/quiz/

import re

def commaParse(num):
    return re.sub('(?<=\d)(?=(\d{3})+(?!\d))',',',str(num))


print (commaParse(-3245.24))

2014/03/04 11:14

무명소졸

링크 감사합니다 - 이병곤, 2014/12/20 23:01
+1 print(commaParse('1000')) print(commaParse("-100")) print(commaParse("0")) print(commaParse("10000000000")) print(commaParse("100999.99990")) print(commaParse("+100999.99990")) print(commaParse("133300999.99990")) print(commaParse("-100000000.99990")) 1,000 -100 0 10,000,000,000 100,999.99,990 +100,999.99,990 133,300,999.99,990 -100,000,000.99,990 소숫점 이하에 콤마가 들어가요 예외처리가 있어야 할 것같아용 def commaParse(num): value = str(num).split('.') # print(len(value)) if len(value) == 2: return re.sub('(?<=\d)(?=(\d{3})+(?!\d))',',', str(value[0])) +'.'+ str(value[1]) else: return re.sub('(?<=\d)(?=(\d{3})+(?!\d))',',', str(num)) - maluchi, 2020/02/03 14:21

펄입니다

$_=@ARGV[0];$_=reverse;s/(\d\d\d)(?=\d)(?!\d*\.)/$1,/g;print scalar reverse;

리눅스 셀에서 다음과 같이 사용합니다

$ perl -e '$_=@ARGV[0];$_=reverse;s/(\d\d\d)(?=\d)(?!\d*\.)/$1,/g;print scalar reverse' 20000000
20,000,000
$ perl -e '$_=@ARGV[0];$_=reverse;s/(\d\d\d)(?=\d)(?!\d*\.)/$1,/g;print scalar reverse' -- -3245.24
-3,245.24

2014/12/20 23:00

이병곤

c++ 입니다


#include "stdafx.h"

#include <iostream>
#include <string>

using namespace std;

int _tmain(int argc, _TCHAR* argv[])
{
    string input;
    cin >> input;

    bool bMinus = false;
    bool bFloat = false;
    string strFloat;

    size_t pos = input.find( "-" );
    if( string::npos != pos )
    {
        bMinus = true;
        input = input.substr( pos+1 );
    }   

    pos = input.find( "." );
    if( string::npos != pos )
    {
        bFloat = true;
        strFloat = '.' + input.substr( pos+1 );
        input = input.substr( 0, pos );
    }   

    auto itPos = input.begin();
    pos = input.size();
    while( true )
    {
        if( pos <= 3 )
            break;

        itPos = input.begin() + pos - 3;
        input.insert( itPos, ',' );
        pos = input.find( "," );        
    }

    if( bMinus )
        input.insert( input.begin(), '-' );
    if( bFloat )
        input.append( strFloat );

    cout << input << endl;
}

2015/01/25 21:07

Jun JungHoon

public static string Comma(string Str)
        {
            if (Str.Contains("."))
            {
                string[] tmp = Str.Split('.');
                int aps = int.Parse(tmp[0]);
                string ap = string.Format("{0:n0}", aps);
                string result = string.Format("{0}.{1}", ap, tmp[1]);
                return result;
            }
            else
            {
                int aps = int.Parse(Str);
                string ap = string.Format("{0:n0}", aps);
                return ap;
            }
        }

2015/06/14 18:54

허 빈

import java.util.*; 

class PutComma {
    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);
        String numS = scanner.nextLine();

        //comma의 갯수 확인
        int com = (numS.length()-1)/3;
        int nonCom = (numS.length())%3;

        StringBuffer numB = new StringBuffer(numS);
        numB = numB.reverse();

        StringBuffer numC = new StringBuffer();
        int index =0;
        for(int i=0;i<com;i++) {
            numC = numC.append(numB.charAt(index++)).append(numB.charAt(index++)).append(numB.charAt(index++)).append(',');
        }
        for(int i=0;i<nonCom;i++) {
            numC = numC.append(numB.charAt(index++));
        }
        numC = numC.reverse();

        System.out.println(numC);//콤마를 추가한 숫자를 출력
    }
}

2019/01/30 12:36

고요정

def comma(n):
    if len(n)<4:
        return n
    if n[0]=="-":
        return "-"+comma(n[1:])
    if "." in n:
        return comma(n[:n.find(".")]) + n[n.find("."):]
    if len(n)>=4:
        return comma(n[:-3]) + ',' + n[-3:]
n=input("숫자를 입력하십시오: ")
print(comma(n))

2020/01/13 10:52

박시원

발로 짠 Clojure 코드입니다. 이렇게 짜면 안된다는 걸 보여드리기 위해... 쿨럭.

#(apply str (flatten (interpose \, (filter (complement empty?) (cons (take (rem (count %) 3) %) (partition 3 (drop (rem (count %) 3) %)))))))

2014/02/19 00:27

박연오

Ruby.

def comma(amount)
  integer, decimal = amount.to_s.split(".")
  puts [integer.reverse.scan(/.{1,3}/).join(",").reverse, decimal].compact.join(".")  
end

2014/02/28 03:36

nacyot

파이썬으로 작성해봤습니다. 조악하네요..ㅠㅠ

def comma(j):
    jtoStr = str(j).split('.')
    flt = jtoStr[-1]
    Listj = list(jtoStr[0])
    t = len(Listj)
    i = 0
    r = ''
    while t > 2:
        comp = 3 + i + i * 3
        i += 1
        Listj.insert(len(Listj)-comp,',')
        t = Listj.index(',')
    for t in range(0,len(Listj),1):r+=Listj[t]
    result = r+"."+flt
    return result

2014/03/16 04:04

umtie

JAVA입니다

package h_add_comma_to_num;
public class AddComma {

    /*AddComma Function*/
    String addC(String input){
        String result=""; int i,n,l=input.length(); //Finding the point
        for(n=0; n<l && input.charAt(n)!='.'; n++);
        for(i=0; i<input.length(); i++)
        result=result+(input.charAt(i))+((i<n-1 &&(n-i-1)%3==0 && input.charAt(i)!='-'&&input.charAt(i)!='+')?",":"");
        return result;
    }
    /*AddComma Function ends*/

    String addC(long input){ return addC(input+"");}
    String addC(double input){ return addC(input+"");} //이렇게 하면 long, double값을 직접 넣어도 되요.
    public static void main(String[] args) {
        AddComma a=new AddComma();
        /*For example*/
        System.out.println(a.addC("+234345523432223252323.5562345"));
        System.out.println(a.addC("2234322232500"));
        System.out.println(a.addC(234567890)); //addC(long input) 사용
        System.out.println(a.addC(1234567.890123d+"")); //값이 문자열로 전환되어 addC(String input) 사용
    }
}
#위의 Example 결과
+234,345,523,432,223,252,323.5562345
2,234,322,232,500
234,567,890
1,234,567.890123
#추가로, long, int를 콤마를 추가한 문자열로 변환하는 함수
    String addC(long input){
        String result=""; int i; long m;
        for(i=0,m=1; (input/m)>0; i++,m*=10)
            result=(char)((input/m)%10+48)+((i%3==0&&i>0)?",":"")+result;
        return result;
    } // 각 자리의 수에다가 (char)(n+48)을 하는 이유 → int 또는 long값 n+48을 char로 변환하면 숫자n이 된다.

#내친김에, double형 값을 받아 변환하는 함수도 사용..
사실 (input+"")이렇게 String형으로 만들어서 addC(String input)을 사용해도 되고,

String addC(double input){ return addC(input+"");}

요렇게 재귀함수 넣어도 됩니다.
그래도 그냥 올려봐요

     String addC(double input){
        String result="", inputS=input+"";
        int i;
        long m, inputL=(long)input; String Integer=inputL+"";
        String pointbelow=inputS.substring(Integer.length(),inputS.length());
        for(i=0,m=1; (inputL/m)>0; i++,m*=10){
            result=(char)((inputL/m)%10+48)+((i%3==0&&i>0)?",":"")+result;
        }
        result=result+pointbelow;
        return result;
    }

#main클래스에서,
AddComma a=new AddComma();
System.out.println(a.addC(1234567.8901234d));

#출력
1,234,567.8901234

2014/03/16 12:33

Katherine

아 아래에 올린 String addC(double input) 함수는 음수 double값을 넣으면 엉뚱한값(pointbelow만)을 내놓내요 시간있으면 수정해볼게요 ㅋㅋㅋㅋ 그냥 String addC(double input){ return addC(input+"");}이렇게 하면 음수도 되요ㅎㅎ - Katherine, 2014/03/16 17:27
import java.util.Arrays;


public class NumberFormat {

    public void chNumberFormat(double[] testNumber){
        String[] result=new String[testNumber.length];
        int idx=0;
        for(double num : testNumber){
            double tmpNum=num;
            if(tmpNum<0){
                tmpNum=tmpNum *-1;
            }
            String str=String.valueOf(tmpNum);
            String tmp="";
            if(str.indexOf(".")>-1){
                str=str.substring(0,str.indexOf("."));
            }
            int cnt=0;
            for(int i=(str.length()-1);i>=0;i--){
                cnt++;
                if((cnt)%3==0){
                    tmp=","+str.charAt(i)+tmp;
                }else{
                    tmp=str.charAt(i)+tmp;
                }
            }           
            result[idx++]=String.valueOf(num).replace(str,tmp.toString());
        }
        System.out.println(Arrays.toString(result));

    }

    public static void main(String args[])throws Exception{
        double testNumber[] =new double[]{1000,2000000,-3245.24};
        new NumberFormat().chNumberFormat(testNumber);

    }
}

2014/04/11 15:59

23king

파이썬 3.2.5 기준입니다.

number = input("숫자를 입력하세요 : ")
if number[0] == "-": number, money, minus = number[1:], "", "-"
else: money, minus = "", ""
dot = number.split('.')
for i in range(1,len(dot[0])+1):
    if (i-1) % 3 == 0 and i != 1: money = dot[0][-i] + "," + money
    else: money = dot[0][-i] + money
try: money = minus + money + "." + dot[1]
except: money = minus + money
print(money)

2014/06/23 22:31

Youngjin Shin

    public String numberFormatConvert( String amount ){
        Stack<Character> stk = new Stack<Character>();
        String strAmount = amount.substring(0, amount.indexOf('.'));
        String tailAmount = amount.substring(amount.indexOf('.'));
        String prtAmount = "";      
        int cnt = 0; // 콤마(,) 삽입할 자릿수
        for( int i=strAmount.length()-1; i>=0; i-- ){
            char ch = strAmount.charAt(i);  
            cnt++; 
            stk.push(ch);
            if( cnt%3==0 && i>0 ) stk.push(',');
        }
        while( !stk.isEmpty() )
            prtAmount = prtAmount + stk.pop();

        return prtAmount+tailAmount;
    }

2014/10/08 15:01

rapahj

정규식 쓰라고 낸 문제 같아서...

import re

def withComma(num):
    str_ = str(num)
    return re.sub(r'(?<=\d)(?=(\d{3})+(?!\d))', ',', str_)
"""                 ~~~~~~ ~~~~~~~~~~~~~~~~~
                       |       ~~~~~~~ ~~~~
                       |          |      \ 3. 숫자 3개 단위 이후로는 숫자가 없어야 합니다.
                       |      2. look ahead로 뒤에 숫자 3개 단위 묶음이 1개 이상나와야 하고
                 1. look behind로 앞에 숫자가 있어야 이후 매칭함
"""

2014/12/11 17:08

룰루랄라

소수점 이하에 , 안붙이도록 하려다보니 sub 두개 썻네요 =ㅅ=

def fommated_number(str)
  str.sub(/\d+/) { |m| m.gsub(/(?=(\d{3})+$)/, ",") }
end

2014/12/13 00:08

Shim Won

Perl

$_=<>;
if(/^-?(\d{4,})/){
    for($p=$+[1]-3;$p>$-[1];$p-=3){
        substr($_,$p,0)=',';
    }
}
print

2015/01/06 18:30

*IDLE*

    Sub Main()
        Dim input As String = Val(Console.ReadLine)

        Dim sb As New Text.StringBuilder
        Dim intArea As String = StrReverse(Split(input, ".", 2).First) ' 1000 -> 0001
        Dim decArea As String = Split(input, ".", 2).Last

        For i As Integer = 0 To intArea.Length - 1
            If i Mod 3 = 0 And i > 0 Then sb.Append(",")
            sb.Append(intArea(i))
        Next

        If input.Contains(".") Then
            Console.WriteLine(String.Join(".", {StrReverse(sb.ToString), decArea}))
        Else
            Console.WriteLine(StrReverse(sb.ToString))
        End If

        Console.ReadLine()
    End Sub

2015/06/12 19:01

Steal

#include<cstdio>
#include<cstring>
int main()
{
    int a,b,i;
    char c[201];
    scanf("%d",&a);
    scanf("%s",&c);
    if(a<=3)
    {
        printf("%s",&c);
        return 0;
    }
    printf("%c",c[0]);
    for(i=1; i<a; i++)
    {
        if(i==a%3||i%3==a%3)
        {
            printf(",");
        }
        printf("%c",c[i]);
    }
}

2015/06/12 23:50

코딩호빵이

이거 한번 돌려봤는데 이상하게 나오던데... 맞나요? - 배민준, 2020/12/21 23:04
    $g = $_GET['q'];
    function numComma($number){
        $result = "";
        $strlen = strlen($number);
        $comma = $strlen % 3;
        for($i=0;$i<$strlen; $i++){
            if($i!=0 && $i%3 == $comma)
            {
                $result .= ",";
            }
            $result .= substr($number, $i, 1);      
        }
        return $result;
    }
    echo numComma($g);

소수점 처리 조언좀 부탁드릴게요...

2015/06/14 20:56

hanjonghoon

이렇게 짜면 안된다는것을 보여드리려고 짰어요(핑계)..

하하,,,,,, 저좀 무식하네요.

public class Main {

  public static void main(String[] args) {

      Scanner keyboard = new Scanner(System.in);
      String n;
      n = keyboard.nextLine();
      String Front = n, Back = "";

      if (n.indexOf(".") > -1){
        Front=n.substring(0, n.indexOf("."));  Back = n.substring(n.indexOf("."), n.length()); }


     for(int i=Front.length() -3; i>0; i-=3){
       Front =  Front.substring(0, i) + "," + Front.substring(i, Front.length());
     }

     System.out.println(Front + Back);
    }
}

2015/06/16 19:04

문성훈

        public string FormatComma(string input)
        {
            var rest = string.Empty;
            var output = string.Empty;
            if (input.Contains("."))
            {
                rest = input.Split(".").Last();
                input = input.Split(".").First();
            }

            var count = 0;
            var reference = 0;

            for (int i = input.Length - 1; i >= 0; i--)
            {
                var current = input[i].ToString();
                var verify = int.TryParse(current, out reference);
                output = current + output;
                count++;
                if (count%3 == 0 && i != 0 && verify) 
                    output = "," + output;
            }
            return output + "." + rest;
        }


        public string FormatComma(string input)
        {
            var first = string.Empty;
            var output = string.Empty;
            var rest = string.Empty;
            if (input.Trim().Length == 0) return output;
            if (input.Contains("."))
            {
                rest = "." + input.Split(".").Last();
                input = input.Split(".").First();
            }
            if (input.First().ToString() == "-")
            {
                first = input.First().ToString();
                input = input.Split("-").Last();
            }
            var check = 0;
            var count = 0;
            for (int i = input.Length - 1; i >= 0; i--)
            {
                var curr = input[i].ToString();
                output = curr + output;
                count++;
                if (count%3 == 0 && i != 0 && int.TryParse(curr, out reference))
                    output = "," + output;
            }
            return header + output + rest;
        }

2015/07/28 10:22

Straß Böhm Jäger

1000 - 1,000 20000000 - 20,000,000 -3245.24 - -3,245.24 -345.24 - -345.24 -345345.24 - -345,345.24 - Straß Böhm Jäger, 2015/12/01 08:24
//숫자를 받음
$test_number = $_GET['test_number'];

$number_array = array();

//소숫점 자리 index파악
$temp_test_number_val = 0;

//기존 문자열을 배열로 나눠 담음 (,를 붙이기 위하여)
//strlen($test_number) : 문자열 사이즈만큼 돌게됨
for($index = 0; $index<strlen($test_number); ++$index)
{
    //소숫점이 있을 경우 멈춤
    if($test_number[$index] == '.') {
        //소숫점 자리 index파악 
        $temp_test_number_val = $index;
        break;
    }

    $number_array[$index] = $test_number[$index];
}

$index = 1;

//콤마를 붙이기 위한 작업
while(true)
{
    //오른쪽에서 3번째마다 콤마가 붙는데 콤마가 붙으면서
    //index가 -1 가되어 -4씩 적용이 됨
    $index = $index-4;

    //array_splice : 콤마를 붙이기 위한 함수(배열 사이에 끼워넣기)
    array_splice($number_array,$index,0,",");

    //$number_array[0]가 0일경우 break;
    if($number_array[0] == ",") break;
}

//맨 앞의 요소 지움
unset($number_array[0]);

//배열을 string형으로
$number_array = implode("",$number_array);

//$temp_test_number_val 가 0이 아닐때만 for문 돌림
//소숫점자리 다시 가져오기 위한...
if($temp_test_number_val != 0)
{
    //소숫점 자리부터 시작
    for($index = $temp_test_number_val; $index<strlen($test_number); $index++)
    {
        //출력 배열에 더함 .= 기존 문자열 배열의 소숫점 자리부터
        $number_array .= $test_number[$temp_test_number_val];

        ++$temp_test_number_val;
    }
}

//출력
print_r($number_array);

2015/08/28 16:07

mung mangmang

python3입니다. 무식해서 아직 정규식을 모릅니다 ㅜㅠ

def insert_comma(num):
    m = ''
    if (num[0] == '-'):
        m = '-' 
        num = num[1:]

    if len(num) < 4: return m + num

    l = (len(num) - 1) % 3 + 1
    res = num[0:l]
    for i in range(l, len(num), 3):
        res += ',' + num[i:(i + 3)]
    return m + res

2015/11/22 22:16

jspark

if __name__ == '__main__':
    Num = input('Enter number: ')
    Num = Num.rstrip().split('.')

    NumList = list(Num[0])
    NumList.reverse()

    quo, rem = divmod(len(NumList),3)
    NewNum = [NumList[x*3+2]+NumList[x*3+1]+NumList[x*3] for x in range(quo)]

    if rem:
        NewNum.append(''.join(NumList[-1:quo*3-1:-1]))

    NewNum.reverse()

    if len(Num) > 1:
        print("금액표현:  %s" % ','.join(NewNum)+'.'+Num[1])
    else:
        print("금액표현:  %s" % ','.join(NewNum))

2015/12/30 18:38

SPJung

  • python으로 작성했습니다.
def insertComma(s):
    l=list(s)
    digitEnd=0
    if l[0].isdigit()==False: # 첫자리 부호이면
        digitEnd=1

    commaPos=[i for i in range(len(l)-3,digitEnd,-3)]
    for pos in commaPos:
        l.insert(pos,",")

    return "".join([str(i) for i in l])

def getMoneyFormat(s):
    idx=s.find('.')
    right=None
    if idx>=0:
        left,right=s.split('.')
    else:
        left=s

    left=insertComma(left)

    if right==None:
        return left
    else:
        return left+'.'+right

print getMoneyFormat("-312567.98754")
print getMoneyFormat("1000")
print getMoneyFormat("20")
print getMoneyFormat("300000")

2016/01/11 09:06

씨니컬우기님

d = raw_input()
sign,decimal ='',''
if d[0] in ['+','-'] : sign = d[0];d = d[1:]
if d.count('.')>0 : decimal = d[d.index('.'):];d = d[:d.index('.')]

d = list(d)
d.reverse()
r=[]
for i in range(len(d)):
    if i>0 and i%3==0 : r.append(',')
    r.append(d[i])
r.reverse()

print sign+''.join(r)+decimal

2016/01/16 20:12

상파

C입니다. 실행 후 숫자를 입력하면 됩니다.

#include <stdio.h>
#include <string.h>

#define MAX 1000

void comma(char *buf)
{
    unsigned int len;
    unsigned int i;
    unsigned int j;

    strtok(buf, ".");

    len = (unsigned int) strlen(buf);
    if(buf[0] == '-')
    {
        printf("%c", '-');
        for(i=1;i<((len-1)%3+1);i++)
        {
            printf("%c", buf[i]);
        }
    }
    else
    {
        for(i=0;i<(len%3);i++)
        {
            printf("%c", buf[i]);
        }
    }

    for(j=i;j<len;j+=3)
    {
        printf(",");
        printf("%c", buf[j]);
        printf("%c", buf[j+1]);
        printf("%c", buf[j+2]);
    }

    if((buf = strtok(NULL, "."))!=NULL)
    {
        printf(".");
        printf("%s", buf);
    }

    puts("");
}


int main()
{
    char buf[MAX];
    scanf("%s", buf);
    comma(buf);
    return 0;
}

2016/01/29 15:27

김슈타인

Python3

def split3(testCase):
    return (split3(testCase[:-3]) + "," + testCase[-3:]) if len(testCase) > 3 else testCase

testCase = input("Input test case : ")
sign = ""
if "-" == testCase[0]:
    sign = testCase[0]
    testCase = testCase[1:]
testCase, rest = testCase.split(".")
print(sign + ".".join([split3(testCase),rest]))

결과
Input test case : 1000
1,000
Input test case : 2000000
20,000,000
Input test case : -3245.24
-3,245.24

2016/02/02 08:21

윤태호

n = raw_input("input a number:")
lst = []
m = ""
for i in range(len(n)):
    if n[i] == '.':
        m = n[i:len(n)]
        n = n[0:i]
        break        
for i in range(len(n)-1, -1, -1):
    if i%3 == 2:
        lst.append(n[i])
        lst.append(',')
    else:
        lst.append(n[i])
lst.reverse()
print ''.join(lst) + m

그냥 별 생각 없이 풀었습니다. %를 사용해서 3번째마다 점을 찍었습니다.

2016/02/02 14:58

취미로재미로

Ruby

int = ->n { n.reverse.scan(/.{1,3}/).join(',').reverse }
m_form = ->s { n,q=s.to_s.split('.'); int[n] + (q ? "."+q:"") }

Test

expect(m_form[1000]).to eq "1,000"
expect(m_form[20000000]).to eq "20,000,000"
expect(m_form[-3245.24]).to eq "-3,245.24"

2016/02/06 20:42

rk

while __name__ == '__main__':
    a = input('입력: ')
    if a.count('.')>=1:
        ipart = list((a.split('.')[0]))
    else:ipart = list(a)
    if len(ipart)<=3:print (a)
    tmp = []
    for i in range(2*(len(ipart)//3)):
        if len(ipart)-3*(i+1) <= 0:
            tmp.append(ipart[0:len(ipart)-3*i])
            break
        tmp.append(ipart[len(ipart)-3*(i+1):len(ipart)-3*i])
        tmp.append(',')
    tmp.reverse()
    if a.count('.')>=1:
        tmp.append('.')
        tmp.append(list((a.split('.')[1])))
    for x in tmp:
        if type(x) == list:
            for y in x:print(y, end = '')
        else:print(x, end = '')

파이썬 3.5.1 입니다.

while __name__ == '__main__':
    a = input('입력: ')
    minus, b = ('','')
    if a.count('-'):minus = '-'; a = a[1:]
    if a.count('.') != 0:b = a[a.find('.'):]; a = a[:a.find('.')]
    if len(a) > 3:
        for i in range(1,(len(a)+2)//3):a = (a[:len(a)-(4*i-1)]+','+a[len(a)-(4*i-1):])
    print(minus+a+b) 

짧게도 만들어봤습니다.

2016/03/12 22:19

Flair Sizz

void inputComma(String s) {
        StringBuilder builder = new StringBuilder();
        int count = 0;

        for(int i=s.length()-1; i>=0; i--) {
            if(count == 3) {
                builder.append(",");
                count = 0;
            }
            builder.append(s.charAt(i));
            count++;

        }
        builder.reverse();
        System.out.println(builder);
    }

java

2016/03/17 02:10

mozzi

파이썬3.4.4

재귀호출입니다.

import re

def f(n):

    if type(n) != str:
        n = str(n)

    if '.' in n:
        dot = n.find('.')
        return f(n[:dot]) + n[dot:]

    if not n.isdigit():
        digit_i = re.search('[\d]', n).start()
        return n[:digit_i] + f(n[digit_i:])

    if len(n) > 3:
        return f(n[:-3]) + ',' + n[-3:]
    else:
        return n

a = 1000
b = 2 * 10**7
c = -3245.24
d = '-$235753.4827332'
e = 10**5

f(a), f(b), f(c), f(d), f(e)
# ('1,000', '20,000,000', '-3,245.24', '-$235,753.4827332', '100,000')

2016/03/25 01:30

디디

파이썬 3.4.2입니다.

n = str(input())[::-1]
a = n[n.find('.')+1:].replace('-','')
s = a
for i in range(len(a)):
    if (i+1)%4 == 0:
        s = s[:i] + ',' + s[i:]
n = n.replace(a,s,1)
print(n[::-1])

2016/04/02 18:26

차우정

package Comma;

public class Comma {

String[] stringArray = null;

public void initialize(String args[]) {
    stringArray = new String[args.length];
    for(int i=0; i<args.length; i++) stringArray[i] = args[i];
    setComma();
}

public void setComma() {
    char[] temp = null;
    int length = -1;
    int numOfChar = -1;
    int count = 0;
    int index = 0;
    for(String s: stringArray) {
        length = s.length();
        numOfChar = length%3;
        temp = new char[length];
        for(int i=0; i<length; i++) {
            temp[i] = s.charAt(i); 
        }

        if(numOfChar!=0){
            while(numOfChar>0) {
                System.out.print(temp[index]);
                numOfChar--;
                index ++;
                continue;
            }
            System.out.print(",");
        }

        for(int i=index; i<length; i++) {
            System.out.print(temp[i]);
            count++;
            if(count%3==0 && i!=length-1) System.out.print(",");
        }
    }
}

public static void main (String args[]) {
    Comma comma = new Comma();
    comma.initialize(args);
}

}

2016/04/07 16:21

서영주

def comma(a):
    b = len(a) // 3
    c = len(a) % 3
    d = []
    j = 0
    f = []
    g = ""
    for i in range(len(a)):
        d.append(a[i])
    d.reverse()
    for i in range(1, len(d)):
        if i % 3 == 0:
            f.append(i)
    for i in f:
        d.insert(int(i + j), ",")
        j = j + 1
    d.reverse()
    for i in range(len(d)):
        g = g + d[i]
    return g
def commadot(a):
    b = len(a) // 3
    c = len(a) % 3
    d = []
    j = 0
    f = []
    g = ""
    for i in range(len(a)):
        d.append(a[i])
    for i in range(1, len(d)):
        if i % 3 == 0:
            f.append(i)
    for i in f:
        d.insert(int(i + j), ",")
        j = j + 1
    for i in range(len(d)):
        g = g + d[i]
    return g

number=input()
if "." in number:
    a,a1=number.split(".")
else:
    a=number
    a1=""

g=""
if "." in number:
    if a[0]!="-":
        g=g+comma(a)+"."+commadot(a1)
    else:
        a=str(abs(int(a)))
        g="-"+comma(a)+"."+commadot(a1)
else:
    if a[0] != "-":
        g = comma(a)
    else:
        a = str(abs(int(a)))
        g = "-" + comma(a)
print(g)

와 정규식 배워야겠어요. 코드 진짜 거지 같네요..

질문 있습니다.!! 질문하면 혹시 답 달아 주실까봐 씁니다. 리스트 값을 한줄에 리스트 표시"["와 "," 없이 출력하는 방법좀 알려주세요. join 함수를 이용해서 해보려고 했는데 잘 안되서 문자열로 치환해서 출력했습니다. 혹시 힌트라도 좀 주세요!!!

2016/04/21 20:24

Dr.Choi

>>>''.join(문자열로만 이루어진 리스트) - 디디, 2016/10/17 14:37

Python 3.4.4

import re

test_case = ['1000', '20000000', '-3245.24']

[print(re.sub(r'(?<=\d)(?=(\d{3})+(?!\d))', ',', x)) for x in test_case]

2016/05/20 18:24

SanghoSeo

파이썬 3.5로 작성되었습니다.

num = [1000, 20000000, -3245.24]
new = []
new_float = []
float_cnt = 0

for i in range(len(num)):
    new.append(list(str(abs(int(num[i])))))
    if len(new[i]) > 3:
        if len(new[i]) % 3 == 0:
            for k in range(int(len(new[i])/3) - 1):
                new[i].insert((4*k+3), ',')
        elif len(new[i]) % 3 == 1:
            for k in range(int(len(new[i])/3)):
                new[i].insert((4*k+1), ',')
        elif len(new[i]) % 3 == 2:
            for k in range(int(len(new[i])/3)):
                new[i].insert((4*k+2), ',')
    if num[i] < 0:
        new[i].insert(0, '-')                    
    if type(num[i]) != int:
        new_float.append(list(str(num[i])))
        for k in range((new_float[float_cnt].index('.')), len(new_float[float_cnt])):
            new[i].append(new_float[float_cnt][k])
        float_cnt += 1

for i in range(len(new)):
    for j in new[i]:
        print(j, end="")
    print("")

결과화면

1,000
20,000,000
-3,245.24

포기할까 하다가 오기가 생겨서 어떻게든 어거지로 푼 발코딩입니다.

숫자를 문자열로 바꾸고 자릿수를 3으로 나눠서 ,를 찍는 방식이며

소수의 경우 '.'을 찾아서 그 이후 숫자를 추가하는 방법으로 풀었습니다.

많이 부족합니다. 감사합니다.

2016/06/07 14:09

greatfarmer

a=float(input("input :"))
s_a=abs(int(a)-a+0.000000001)
a=" ".join(str(int(a))).split()
b=len(a)
c=0
for i in range(3,b,3):
    a.insert(-1*(i+c),",")
    c+=1
if s_a==0.000000001:
    a="".join(a)
else:
    a="".join(a)+str(s_a)[1:10]
print(a)

Python 3.5.2 소수점 9자리까지 구현.

2016/07/28 14:08

Zee

#include <stdio.h>
int getIntNumLen(char* s){
    int l = 0;
    while(*s != '\0') { 
        switch(*s){
            case '-':
            case '+':
                break;
            case '.':
                return l;
            default:
                l++;
                break;
        }
        s++;
    }
    return l;
}

void commaNum(char* s, char* r) {

    int i = 0;
    int l = getIntNumLen(s);
    int floatMode = 0;

    while(*s != '\0') {
        switch(*s){
            case '-':
            case '+':
                break;
            case '.':
                floatMode = 1;
            default:
                i++;
                break;
        }   
        *r++ = *s++;
        if(floatMode == 0 && i < l && (l - i) % 3 == 0) { 
            *r++ = ',';
        }
    }
    *r = '\0';
}

int main() {
    char* s[4] = { "123", "1234567890", "-3245.24", "+12345678901234.567890" };
    char r[4000];

    for(int i = 0; i < 4; i++) {
        commaNum(s[i], r);
        printf("%s ==> %s\n", s[i], r);
    }
}
D:\16.minGW>a
123 ==> 123
1234567890 ==> 1,234,567,890
-3245.24 ==> -3,245.24
+12345678901234.567890 ==> +12,345,678,901,234.567890

D:\16.minGW>

2016/09/14 12:38

이 종성

#include <stdio.h>
#include  <math.h>
int getSize(double val);

void main(void) {
    double input;
    scanf("%lf", &input);

    double temp = input;
    if(input < 0) {
        printf("-");
        temp = abs(input);
    }
    int size = getSize(temp);
    for(int i=size-1 ; i>=0; i--) {
        if(i==0)
            printf("%g", temp);
        else
            printf("%0.f", floor(temp/pow(10.0, i)));
        if(i%3==0 && i!=0)
            printf(",");
        temp =  temp-pow(10.0, i) * floor(temp/pow(10.0, i));
    }

}
int getSize(double val) {
    int i = 1;
    int count = 0;
    while(val/i >= 1) {
        i = i*10;
        count++;
    }
    return count;
}


2016/09/20 19:38

코딩초보

def Analysis_N(number):
    number = number
    Is_positive = True
    Is_digit = True
    if (number >= 0 ):
        pass
    else:
        Is_positive = False
    number = abs(number)
    if (number == int(number)):
        Is_digit = False
    else:
        pass
    number_1 = int(number)
    return (number_1, Is_positive, Is_digit)



def Insert_C(number):
    i = 1
    final_str = ''
    list_N = [x for x in str(number)]
    list_N.reverse()
    a = len(list_N)/3
    if (int(len(list_N)/3)+1 >= a > int(len(list_N)/3)):
        a = int(len(list_N)/3)
    else:
        a = int(a) - 1
    print(a)
    while( i <= a):
        list_N.insert(4*i-1,',')
        i += 1
    print(list_N)
    list_N.reverse()
    for x in list_N:
        final_str = final_str + x
    return final_str

def Print_F(Is_digit, Is_positive, final_str, number):
    string_F = final_str
    if(Is_digit == True):
        string_F = string_F + str(abs(number)-int(abs(number)))
    else:
        pass
    if(Is_positive == True):
        pass
    else:
        string_F = '-' + string_F
    return string_F


number = float(input("What number do you want to change"))
number_1, Is_positive, Is_digit = Analysis_N(number)
final_str = Insert_C(number_1)
String_F = Print_F(Is_digit, Is_positive, final_str, number)
print( str(number) + ' TO ' + String_F )

2016/12/17 10:31

유 정민

_list = ['1000','20000000','-3245.24']
L, R = str(),str()
for x in _list:
    if '-' in x:
        L = x[0]
    if '.' in x:
        R = '.'+x.split('.')[1]
    x = x.split('.')[0].split('-')[-1]
    a = list(x)
    for y in range(len(x)-3,-1,-3):
        a.insert(y,',')
    print(L+''.join(a)+R)

#### 2017.01.25 D-393 ####

걍되는대로 풀어버렸다.

2017/01/25 23:57

GunBang

public class Insert_Comma {

    public static void main(String[] args) {
        String a = "1000";
        String b = "-3245.24";

        a = comma(a);
        b = comma(b);

        System.out.println(a);
        System.out.println(b);
    }

    private static String comma(String a) {
        int length = a.length();
        String comma = "";
        /*sub(i, i+length%3)은 20000000을 20 000 000이렇게 끊기 위함입니다.
         *그리고 if문에서 substring메서드가 StringIndexOutOfBoundsException을 일으키지 않기위해
         *last != length을 추가적으로 걸어줬습니다.
         * */
        for(int first=0,last=length%3;last<=length;first=last,last+=3){
            comma += a.substring(first, last);
            if(last != length && a.substring(last, last+1).equals(".") == false)
                comma += ",";
            System.out.println(comma);
        }
        return comma;
    }

}

2017/02/24 15:16

KimSeonbin

public static void main(String[] args) {
        String str = "10000000";
        String dotStr = "-3245.24";
        System.out.println(InsertComma(str));
        System.out.println(InsertComma(dotStr));
    }

    public static String InsertComma(String str){
        String result ="";
        String tail = "";

        if((str.contains("."))){
            tail = str.substring(str.indexOf("."),str.length());
            str=str.substring(0,str.indexOf("."));
        }

        int count = (int)(Math.floor(str.length()-1)/3);

        for(int i=0; i<count; i++){
            int length = str.length();
            String strCut = str.substring(length-3, length);
            result = ","+strCut+result;
            str = str.substring(0,length-3);

        }
        result = str+result;
        if(tail.length() != 0){
            result += tail;
        }
        return result;
    }

2017/02/28 10:48

Oh Tae Gyeoung

#-*- coding:utf-8 -*-
def putComma(input):
    if type(input) == int or float:
        input = str(input)
    else :
        print "숫자를 입력해주세요"
        return False
    ix = input.find(".") if input.find(".")!= -1 else len(input)
    for i in range(ix,0,-3):
        if i != ix :
            input = input[:i]+","+input[i:]
    return input

print (putComma(1000))
print (putComma(20000000))
print (putComma(-3245.24))

2017/04/18 17:38

daybreak

import java.util.regex.Matcher;
import java.util.regex.Pattern;

public class Currency {

    final static Pattern pattern = Pattern.compile("(^[+-]?\\d+)(\\d{3})");

    public static void main(String[] args) {
        current(String.valueOf(1000));
        current(String.valueOf(20000000));
        current(String.valueOf(-3245.24));
    }

    private static void current(String number) {
        Matcher matcher = pattern.matcher(String.valueOf(number));
        String g1 = "", g2;

        if (matcher.find()) {
            g1 = matcher.group(1);
            g2 = matcher.group(2);
            number = number.replaceAll("(^[-]?\\d+)(\\d{3})", g1 + "," + g2);
        }

        if (g1.length() <= 3) {
            System.out.println(number);
            return;
        } else {
            current(number);
        }
    }
}

2017/05/12 02:48

genius.choi

def money_change(a):
    strin=a.split(".")
    a=list(a)


    if "-" in a:
        del a[0]


        if "." in a:
            a.reverse()
            del a[:3]
            b=int(len(a)/3)
            i=3
            cnt=1
            while cnt <=b:
                a.insert(i,",")
                i+=4
                cnt+=1
            a.reverse()
            a.insert(0,"-")
            a="".join(a)
            a=a+"."+strin[1]
            print(a)
        else:
            a.reverse()
            b=int(len(a)/3)
            i=3
            cnt=1
            while cnt <=b:
                a.insert(i,",")
                i+=4
                cnt+=1
            a.reverse()
            a.insert(0,"-")
            a="".join(a)
            print(a)

    else:
        if "." in a:
            a.reverse()
            del a[:3]
            b=int(len(a)/3)
            i=3
            cnt=1
            while cnt <=b:
                a.insert(i,",")
                i+=4
                cnt+=1
            a.reverse()
            a="".join(a)
            a=a+"."+strin[1]
            print(a)
        else:
            a.reverse()
            b=int(len(a)/3)
            i=3
            cnt=1
            while cnt <=b:
                a.insert(i,",")
                i+=4
                cnt+=1
            a.reverse()
            a="".join(a)
            print(a)
money=input().split()
i=len(money)
for num in range(i):
    money_change(money[num])

2017/06/05 11:43

나후승

Number.prototype.addComma = function() {
    num = ('' + this).split(".");
    num[0] = num[0].replace(/\B(?=(\d{3})+(?!\d))/g, ",");
    return num.join(".");
};

console.log((1000).addComma());
console.log((20000000).addComma());
console.log((-3245.24).addComma());
console.log((-3245.2454545).addComma());

2017/06/16 09:12

funnystyle

def currency(num_str):
    src, dest = list(num_str), ''
    sign = src.pop(0) if src[0] == '-' else ''

    if '.' in src:
        while src[-1] == '.':
            dest = src.pop() + dest

    cnt = 0
    while src:
        dest = src.pop() + dest
        cnt = (cnt + 1) % 3
        if cnt == 0 and src:
            dest = ',' + dest

    return sign + dest


print(currency('1000'))
print(currency('20000000'))
print(currency('-3245.24'))

정규식:

import re

def print_curfmt(s):
    p = re.compile(r'(\d)(\d{3})(?=([.,]|$))')
    while re.search(p, s):
        s = re.sub(p, '\g<1>,\g<2>', s)

    print(s)

2017/07/07 01:43

Noname

[Python 3.6]

def tranNum(numStr):
    numStr = numStr.strip()
    result = floatNumStr = sign = ""

    if numStr.find('.') != -1:
        floatNumStr = '.' + numStr.split('.')[1]
        numStr = numStr.split('.')[0]

    if numStr.find('-') != -1:
        sign = "-"
        numStr = numStr[1:]

    for i in range(3, len(numStr)+1, 3):
        if -1 * i + 3 == 0: endNum = len(numStr)
        else: endNum = -1 * i + 3
        result = "," + numStr[-1 * i:endNum] + result

    result = sign + numStr[:-1 * i] + result + floatNumStr
    return result

print(tranNum("1000"))
print(tranNum("20000000"))
print(tranNum("-3245.24"))

2017/07/18 11:41

Eliya

40대에 파이선 하려니 이런식으로 밖에안되네요

import re
#a="1234567"
a="-12345.67"
d=""

#check jum
if(re.findall("[.]",a)):jum=1
else : jum=0


def comma(a):
    d=re.findall("\d",a)
    count=len(d)/3
    if len(d)%3 == 0 : count=count-1
    count=int(count)
    for i in range (1,count+1):
        d[-3*i]=","+d[-3*i]
    return d

if (a[0].isdigit() and jum==0):
    print("".join(comma(a)))
elif (a[0].isdigit()==False and jum==0 ):
    b=a.split(a[0])
    print(a[0]+"".join(comma(b[1])))
elif (a[0].isdigit() and jum==1):
    b=a.split(".")
    print("".join(comma(b[0]))+"."+b[1])
elif (a[0].isdigit()==False and jum==1 ):
    b=a.split(a[0])
    b=a.split(".")
    print(a[0]+"".join(comma(b[0]))+"."+b[1])

2017/07/25 21:00

박준

파이썬 3.5x


def money(num):
    switch1 = 0
    switch2 = 0
    num4 = ''
    num5 = ''

    #음수일 경우 -부호 제거
    if num.find('-') > 0:
        num2 = num[1:]
        switch1 = 1
    else:
        num2 = num

    #소숫점이 있을 경우 소숫점 제거
    if num2.find('.') > 0:
        num3 = num2.split('.').pop(0)
        switch2 = 1
    else:
        num3 = num2

    #숫자를 역으로 추적하며 쉼표를 붙힘
    for i in range(-1,-(len(num3)+1),-1):
        if (-i)%3 == 1:
            num4 = num4 + ',' + num3[i]
        else:
            num4 = num4 + num3[i]

    #쉼표하나 더 붙혀진거 때고 다시 원래 순서로
    for i in range(-1,-(len(num4)),-1):
        num5 = num5 + num4[i]

    #처음 두 과정 역행
    if switch2==1:
        num5 = num5 + '.' + num2.split('.').pop()
    if switch1==1:
        num5 = '-'+num5

    return num5

2017/07/26 14:56

고든

import re
a="-12232322322221100.111"

def comma(a):
    comma=re.sub(r"(^[+-]?\d+)(\d{3})",r"\1,\2",a)

    return comma

com=comma(a)

while (com.find(",")>=5):
   com=comma(com)
print(com)

2017/07/26 20:31

박준

import java.util.Scanner;

public class Lv3 {
    public void func() {
        Scanner sc = new Scanner(System.in);
        char[] ch = sc.next().toCharArray();
        StringBuffer buffer = new StringBuffer();
        for(int i=0; i<ch.length ;i++)
            if((i != 0) &&((i%3)==0))
                buffer.append("," + String.valueOf(ch[ch.length-i-1]));
            else buffer.append(String.valueOf(ch[ch.length-i-1]));
        System.out.println(buffer.reverse());
    }
    public static void main(String[] args){
        Lv3 obj = new Lv3();
        obj.func();
    }
}

2017/08/03 22:39

sunga

char배열을 역순으로 탐색하여 i%3 == 0 일때를 이용해서 콤마를 추가하였고 StringBuffer의 reverse()를 이용하여 정배열로 되돌렸습니다. - sunga, 2017/08/03 22:44
def add_comma(n) :  # type(n) == float

    if abs(n) < 1000 :  
        return n

    else :
        listn = str(abs(n)).split('.')  
        objt = list(listn[0])  

        t = len(objt) % 3
        if t == 0 :
            s = 3
        else :
            s = t

        for i in range(s, len(str(abs(n))), 3):

            objt.insert(i, ',')

            if n < 0 and len(listn) == 2 :  
                return '-' + ''.join(objt) + '.' + listn[1]

            elif n < 0 and len(listn) != 2 :  
                return '-' + ''.join(objt)

            elif n > 0 and len(listn) != 2 :  
                return ''.join(objt)

2017/08/08 14:54

다크엔젤

def comma(num):
    p = '{0:,.2f}'.format(num)
    print(p)

comma(1000)
comma(20000000)
comma(-3245.24)

2017/08/22 10:02

piko

def comma(num):
   num = str(num).split('.')
   num1 = (num[0])[::-1]
   rev = ''
   for idx, c in enumerate(num1):
       if c == '+' or c == '-':
           continue
       else:
           if idx >0 and idx % 3 == 0:
               rev = rev + ',' + c
           else:
               rev = rev + c
   print(rev[::-1] + (lambda x:'.'+x[1] if len(x)==2 else '')(num))

comma(1000)
comma(20000000)
comma(-3245.24)

2017/08/22 10:34

piko

a = input('Please, enter the amount of moeny : ')

if '.' in a:
    z = a.find('.')
    b = a[0:z]
else:
    b = a

B1 = abs(int(b))
B2 = str(B1)

A1 = B2[0] + ','
A2 = B2[1:]

if '-' in a:
    A1 = '-' + A1

l = []
L = []

if len(B2) <= 3:
    print(a)
else:
    for i in range(0, len(A2)+1):
        if i % 3 == 0:
            l.append(int(i/3))
    del l[0]

    for i in l:
        x = (i-1)*3
        y = i*3
        L.append(A2[x:y])
        if len(A2) % 3 != 0:
            if i == l[-1]:
                L.append(A2[y:])
        else:
            pass

    R = A1

    for i in L:
        if i != L[-1]:
            R += i + ','
        elif len(L) == 1:
            R += i
        elif i == L[-1]:
            R += i

    if '.' in a:
        R += a[z:]

    print(R)

어렵네요 ㅠ

2017/09/01 18:33

검은콩

#include <stdio.h>
#include <string.h>


int main(int argc,char* argv[])
{
    if(argc != 2)
    {
        printf("no argc 2 !!\n");
        return 0;
    }

    int commacount = strlen(argv[1])/3;
    if(strlen(argv[1])%3 == 0)
    {
        commacount = commacount - 1; 
    }
    char arr[commacount+strlen(argv[1])];
    char arrtmp[3];
    int count = 0;
    int realcount = 0;
    for(int i=strlen(argv[1])-1;i>=0;i--)
    {
        if(realcount%3==0 && realcount != 0)
        {
            arr[count] = ',';
            count++;
            i++;
            realcount = 0;
        }
        else
        {
            arr[count] = argv[1][i];
            count++;
            realcount++;
        }
    }
    for(int i=sizeof(arr)/sizeof(char)-1;i>=0;i--)
    {
        printf("%c",arr[i]);
    }

}

2017/09/09 15:57

정모조

def curstr(inp):  # Type(inp) <class 'str'>
    string = "-" * inp.count("-")
    inp = inp.replace("-", "")
    chkdot = inp.find(".")
    tail = ""
    if chkdot >= 0:
        tail = inp[chkdot:]
        inp = inp[:chkdot]
    string += "".join([v + "," if i % 3 == 2 else v for i,
                       v in enumerate(inp[::-1])])[::-1] + tail
    return string

2017/09/12 15:40

mohenjo

package codingdojang;

import java.util.ArrayList;

public class ex12 {

public static void main(String[] args) {
    // TODO Auto-generated method stub
    int k = -355555500;
    String a = Integer.toString(k);
    ArrayList<Character> num = new ArrayList<Character>();
    int count = 0;
    for(int i=0; i<a.length(); i++) {
        num.add(a.charAt(i));
    }

    if(k >= 0) {
        for(int i=num.size()-1; i>=0; i--) {
            count++;
            if(count == 3 && i != 0) {
                num.add(i, ',');
                count = 0;
            }
        }

    }else {
        for(int i=num.size()-1; i>=1; i--) {
            count++;
            if(count == 3 && i != 1) {
                num.add(i, ',');
                count = 0;
            }
        }
    }
    for(int i=0; i<num.size(); i++) {
        System.out.println(num.get(i));
    }
}

}

2017/09/27 15:57

이병호

num = input("input number: ")

num_l = list(str(num))
num_len = len(num_l)
quata = num_len // 3
remain = num_len % 3

count = 0
for i in range(quata):
    if count == 0:
        num_l.insert(remain, ",")
        count = count + 1
    else:
        num_l.insert(remain + count + i * 3 , ",")
        count = count + 1

final = "".join(num_l)

#print (count)
print (final)

2017/10/08 15:30

Yungbin Kim

def comma(num):
    p = '{0:,.2f}'.format(num)
    print(p)

comma(1000)
comma(20000000)
comma(-3245.24)

2017/12/05 13:09

떼디

import java.util.Scanner; public class commaInNumber { public static void main(String[] args) { Scanner a = new Scanner(System.in); int n = a.nextInt(); String str = ""+n+""; int size = str.length(); char[] strArray = new char[size]; char[] copyArray = new char[size]; for(int i=0;i<size;i++) { strArray[i] = str.charAt(i); copyArray[i] = str.charAt(i); }

    // make array reverse
    for(int i=0; i<size; i++) {
        copyArray[i] = strArray[size-1-i];
    }
    // str에는 입력된 값이, copy에는 뒤집힌 값이 들어간다

// System.out.println("Original String: " + Arrays.toString(strArray)); // System.out.println("Original String Size: " + strArray.length); // System.out.println("Copied and Reversed String: " + Arrays.toString(copyArray)); // System.out.println("Copied and Reversed String Size: " + copyArray.length);

    // comma를 넣으면 칸이 늘어나기 마련
    int bigSize;
    bigSize = size + size/3;
    char[] reverse = new char[bigSize];
    for(int i=0; i<size; i++) {
        reverse[i] = copyArray[i];
    }

// System.out.println("Reversed and Enlarged String: " + Arrays.toString(reverse)); // System.out.println("Reversed and Enlarged String Size: " + reverse.length);

    // 4칸마다 comma 삽입 // 처음 삽입되는 i의 위치 =[3]
    for(int i=3; i<bigSize; i=i+4) {
        if(i%4==3) {
            for(int j=bigSize-1; j>=i; j--) {
                reverse[j] = reverse[j-1];
            }
            reverse[i] = ',';
        } 
    }

// System.out.println("Reversed and Enlarged String: " + Arrays.toString(reverse)); // System.out.println("Reversed and Enlarged String Size: " + reverse.length);

    //reverse를 다시 거꾸로 원상복귀한다
    char[] result = new char[bigSize];
    for(int i=0; i<bigSize; i++) {
        result[i] = reverse[bigSize-1-i];
        System.out.print(result[i]);
    }
    a.close();
}

} 주어진 수를 거꾸로 놓고 보면 편할거같아서 이렇게 짰습니다.

2017/12/23 20:17

김기덕

def comma(n):
    n = str(n)
    if n[0]== "-":
        return '-' + comma(n[1:])
    if len(n)<=3:
        return n
    if n.find(".") ==-1:
        return comma(n[:-3]) +',' +n[-3:]
    else :
        return comma(n[:n.find('.')]) +n[n.find('.'):]

comma(-3245.24)

2017/12/28 15:20

얏홍

파이썬 3.6

data = [ '1000','2000000','-3245.24','3245.24']

def commainsert(data):
    tmp,cp,t = [],0,0
    for num in data:
        tmp = list(num)
        if '-' in tmp and '.' in tmp:
            cp = len(tmp) - tmp.index('.')
            while cp + t < (len(tmp)-1)-3:
                cp += (3+t)
                tmp.insert(-cp,',')
                t = 1
        elif '.' in tmp:
            cp = len(tmp) - tmp.index('.')
            while cp + t < len(tmp)-3:
                cp += (3+t) 
                tmp.insert(-cp,',')
                t = 1
        else:
            while cp + t < len(tmp)-3:
                cp += (3+t) 
                tmp.insert(-cp,',')
                t = 1     
        cp,t = 0,0
        print("%-10s%-10s"%(num,''.join(tmp)))

if __name__ == "__main__":
    print("%-8s%-8s"%('숫자','금액'))
    commainsert(data)

*결과값

숫자      금액      
1000      1,000     
2000000   2,000,000 
-3245.24  -3,245.24 
3245.24   3,245.24 

2018/01/30 14:20

justbegin

Java 입니다.

import java.util.Scanner;

public class test {

public static void main(String[] args) {

    System.out.println("숫자를 입력하세요.");
    Scanner sc = new Scanner(System.in);
    String number = sc.nextLine();
    sc.close();

    String[] splitnumber = number.split(""); // 배열에 문자열을 쪼개넣음.

    int dotlocation = number.indexOf("."); // "." 의 위치값 변수.

    if(number.contains("-")) // 음수의 경우.
    {
        if(number.contains(".")) // dot 포함시.
        {
            for(int i = 0; i < number.length(); i++) // 쪼갠 문자열들 차례로 출력.
            {
                System.out.print(splitnumber[i]);
                if((splitnumber.length - i) % 3 == 0) // 콤마 출력.
                {
                    if(i >= dotlocation - 1 || i == 0) // "-" 나오는걸 방지, "." 위치에 콤마 방지, 마지막에 콤마 찍히는거 방지.
                    {
                        continue;
                    }
                    System.out.print(",");
                }
            }
        }
        else // dot 미포함시.
        {
            for(int i = 0; i < number.length(); i++) // 쪼갠 문자열을 차례로 출력.
            {
                System.out.print(splitnumber[i]);
                if((splitnumber.length - i) % 3 == 1) // 콤마 출력.
                {
                    if(i == splitnumber.length - 1 || i == 0) // 마지막에 콤마 찍히는거 방지. "-" 나오는걸 방지.
                    {
                        continue;
                    }
                    System.out.print(",");
                }
            }
        }
    }
    else // 양수의 경우.
    {
        if(number.contains(".")) // dot 포함시.
        {
            for(int i = 0; i < number.length(); i++) // 쪼갠 문자열들 차례로 출력.
            {
                System.out.print(splitnumber[i]);
                if((splitnumber.length - i) % 3 == 0) // 콤마 출력.
                {
                    if(i >= dotlocation - 1 || i == 0) // "-" 나오는걸 방지, "." 위치에 콤마 방지
                    {
                        continue;
                    }
                    System.out.print(",");
                }
            }
        }
        else { // dot 미포함시.
            for(int i = 0; i < splitnumber.length; i++) // 쪼갠 문자열들 차례로 출력.
            {
                System.out.print(splitnumber[i]);
                if((splitnumber.length - i) % 3 == 1) // 콤마 출력.
                {
                    if(i == dotlocation || i == splitnumber.length - 1) // "." 위치에 콤마 방지, 마지막에 콤마 찍히는거 방지.
                    {
                        continue;
                    }
                    System.out.print(",");
                }
            }
        }
    }
}

}

완전 무식하게 풀었네요.

2018/01/30 14:52

Byam_Gyu

파이썬 3.xx입니다.

def comm_num(num):

    #소수점이 있을 경우, 소수점 이하의 숫자를 decimal에 할당. 나머지는 num에 할당
    if num.find('.') != -1:
        decimal = num[num.find('.'):]
        num = num[:num.find('.')]
    else:
        decimal = ''

    #필요한 콤마 갯수를 com_num에 할당
    if num[0] == '-':
        com_num = (len(num) - 2) // 3
    else:
        com_num = (len(num) - 1) // 3

    #숫자를 리스트로 변환
    num_list = list(num)

    #콤마 추가
    for i in range(1, com_num+1):
        num_list.insert(-3*i-i+1, ',')
    num = ''

    #리스트를 문자열로 변환
    for i in range(len(num_list)):
        num = num + num_list[i]

    #콤마가 추가된 숫자에 소수점 이하를 덧붙여서 출력
    print(num + decimal)

comm_num(input())


2018/01/31 21:43

김호현

package insertComma;

public class InsertComma {

    public String insertComma(String n) {

        StringBuilder sb = new StringBuilder(n).reverse();

        int i = 3;

        if (sb.indexOf(".") != -1) {
            if (sb.indexOf(".") + i > sb.substring(sb.indexOf("."), sb.length()).length())
                return sb.reverse().toString();

            i += sb.indexOf(".") + 1;
        }

        else if (n.startsWith("-"))
            i--;

        while (true) {

            sb = sb.insert(i, ",");

            if (i + 4 >= sb.length())
                break;

            i += 4;
        }

        return sb.reverse().toString();
    }

    public static void main(String[] args) {
        // TODO Auto-generated method stub

        InsertComma ic = new InsertComma();

        System.out.println(ic.insertComma("1000"));
        System.out.println(ic.insertComma("100000"));
        System.out.println(ic.insertComma("1000000"));
        System.out.println(ic.insertComma("10000000"));
        System.out.println(ic.insertComma("100000000"));
        System.out.println(ic.insertComma("1000000000"));
        System.out.println(ic.insertComma("32452.4"));
        System.out.println(ic.insertComma("3245.24"));
        System.out.println(ic.insertComma("324.524"));
        System.out.println(ic.insertComma("32.4524"));
        System.out.println(ic.insertComma("3.24524"));
        System.out.println(ic.insertComma("-3.24524"));
        System.out.println(ic.insertComma("-32.4524"));
        System.out.println(ic.insertComma("-324.524"));
        System.out.println(ic.insertComma("-3245.24"));
        System.out.println(ic.insertComma("-32452.4"));

    }

}

2018/02/02 15:59

김치우

r로 풀었습니다.

```{r}
f1<-function(x){
  if(x==0){
    print("0")
  }else{
    if(x<0){
      n<--x
    }else{
      n<-x }
    t<-trunc(log10(n))%/%3+1
    v<-NULL
    for(i in 1:t){
      v[i]<-(n%%(10**(3*i)))%/%(10**(3*(i-1))) }
    p<-NULL
    if(is.double(n)){
      p<-sub("0", "",as.character(round(n%%1,2))) }
    for(u in v[-length(v)]){
      if(u<10){
        p<-paste0(",","00", u, p)
      }else if(u<100){
        p<-paste0(",","0", u, p)
      }else{
        p<-paste0(",",u,p)  } }
    p<-paste0(v[length(v)],p)
    if(x<0){
      p<-paste0("-",p) }
    print(p) } }

f1(1000)
f1(20000000)
f1(-3545.24)

```

2018/02/07 15:44

Seunghyuck Kim

import math
def insert(a):
    b = a.split('.')
    result = ''
    result += b[0][:len(b[0])%3]
    for i in range(math.ceil(len(b[0])/3)-1):
        result += ','+b[0][len(b[0])%3+3*i:len(b[0])%3+3*(i+1)]
    return result

print(insert(input()))

2018/02/17 22:03

김동하

def com(n):
    n=str(n)
    m=len(n)
    re=""
    dot = "." in n and n.find(".") or m
    for i in range(dot):
        re = ((i+1)%3==0 and i != dot-1 and n[dot-i-2]!="-")and ","+n[dot-i-1]+re or n[dot-i-1]+re
    return dot==m and re or re+n[dot:]

2018/03/05 16:29

김자현

#define _CRT_SECURE_NO_WARNINGS // scanf 보안 경고로 인한 컴파일 에러 방지
#include <stdio.h>
#include <string.h>

int main() {
    int  m, dot,j=0;
    char re[100];
    char n[100];


    printf("숫자를 입력하시오\n");
    scanf("%s", n); 
    m = strlen(n);
    for (dot=0; dot<m; dot++){ 
        if (n[dot] == '.') {
            break;
        }
    }
    printf("%d %d\n", m, dot);
    for (int i = 0; i < dot; i++) {
        if ((dot - i) % 3 == 0 && i != 0 ) {
            if (i == 1) {
                if (n[0] != '-') {
                    re[i + j] = ',';
                    j++;
                }
            }
            else
            {
                re[i + j] = ',';
                j++;
            }
        }
        re[i + j] = n[i];
    }
    if (dot != m) {
        for (int i = dot; i < m; i++) {
            re[i + j] = n[i];
        }
    }
    for (int i = 0; i < m + j; i++) {
        printf("%c", re[i]);
    }
    printf("\n");




    return 0;
}

2018/03/06 00:57

탁성하

#include <iostream>
#include <string>

using namespace std;

int main()
{
    int last_position;
    int flag = -1;
    string price;
    while(true){
    cout << "Enter price: ";
    cin >> price;
    if(price == "0") break;

    for(int i=0;i<price.length();i++)
    {
        if(price.at(i) == '.'){
            last_position = i - 1;
            break;
        }
        last_position = i;
    }

    for(int i = last_position;i > 0;i--){
        flag++;
        if(flag == 2 && price.at(i-1) != '-'){
            price.insert(i, ",");
            flag = -1;
        }
    }
    cout << price << endl;
    flag = -1;
    }
    return 0;
}

2018/03/15 16:18

GyuHo Han

public class NumberCommaInsert {

    public static void main(String[] args) {
        // TODO Auto-generated method stub
        String[] number = new String[]{"1000", "20000000", "-3245.24"};

        String num = null;

        for(int i=0; i<number.length; i++){

            num = number[i];

            if(num.contains(".") && num.length() > 3){
                int index = num.indexOf(".");
                StringBuffer sb = new StringBuffer(num);
                for(int j = index-3; j > 0; j=j-3){
                    sb = sb.insert(j , ",");
                }
                System.out.println(sb.toString());
            }else if(num.length() > 3){
                StringBuffer sb = new StringBuffer(num);

                for(int j = sb.length()-3; j > 0; j=j-3){
                    sb.insert(j , ",");
                }
                System.out.println(sb.toString());
            }

        }

    }

}

1,000
20,000,000
-3,245.24

2018/03/15 23:28

김태훈

Money,x = list(input("돈을 입력하세요")),3
Money.reverse()
while len(Money) > x:
       Money.insert(x,',')
       x += 4
Money.reverse()
print("".join(Money))

2018/03/22 23:39

김영성

/* 숫자에 콤마 삽입하기 */
package main

import (
    "fmt"
    "strconv"
    "strings"
)

func main() {
    var num1, num2, num3 float64 = 1000, 20000000, -3245.24
    fmt.Println(GetCurrency(num1))
    fmt.Println(GetCurrency(num2))
    fmt.Println(GetCurrency(num3))
}

func GetCurrency(num float64) string {
    numstr := strconv.FormatFloat(num, 'f', -1, 64)
    head, body, tail := parse(fmt.Sprint(numstr))
    body = commarize(body)
    return head + body + tail
}

func parse(num string) (head, body, tail string) {
    head, body, tail = "", num, ""
    if test := num[0:1]; test == "+" || test == "-" {
        head = test
        body = body[1:]
    }
    if chk := strings.Index(body, "."); chk != -1 {
        tail = body[chk:]
        body = body[:chk]
    }
    return
}

func commarize(body string) string {
    rst := ""
    for idx, txt := 0, reverse(body); idx < len(txt); idx++ {
        rst += txt[idx : idx+1]
        if idx%3 == 2 && idx != len(txt)-1 {
            rst += ","
        }
    }
    rst = reverse(rst)
    return rst
}

func reverse(s string) string {
    rst := ""
    for idx := 0; idx < len(s); idx++ {
        rst = s[idx:idx+1] + rst
    }
    return rst
}

2018/03/26 21:14

mohenjo

Swift입니다.

import Foundation

func addComma(_ number: String) -> String {
    let numStrings = number.split(separator: ".")
    let signCount = numStrings[0].starts(with: "-") ? 1: 0
    let integer = Array(numStrings[0])
    let integerCount = integer.count - 1

    var finalNumber = ""
    for i in 0...integerCount {
        finalNumber += String(integer[i])
        if i != integerCount && (i + signCount + integerCount) % 3 == 0 {
            finalNumber += ","
        }
    }

    if numStrings.count > 1 {
        finalNumber += "."
        finalNumber += numStrings[1]
    }
    return finalNumber
}

print( addComma("1234567890.1234") )
print( addComma("1234.1234") )
print( addComma("1234") )
print( addComma("-1234567890.1234") )
print( addComma("-1234.1234") )
print( addComma("-1234") )

실행결과는...

1,234,567,890.1234
1,234.1234
1,234
-1,234,567,890.1234
-1,234.1234
-1,234

2018/03/31 00:50

졸린하마

import re
b = re.compile('(\d*)[.]*(\d*)')

a = '1234567.412'
m = b.search(a)

k1 = m.group(1)
k2 = m.group(2)
k3 = ''

if len(k1) % 3 == 0:
    for i in range(len(k1)//3):
        if i != 0:
            k3 = k3 + ','
        for j in range(3):
            k3 = k3 + k1[len(k1) -  (3 * i) -1 - j]
if len(k1) % 3 == 1:
    for i in range(len(k1)//3):
        if i != 0:
            k3 = k3 + ','
        for j in range(3):
            k3 = k3 + k1[len(k1) -  (3 * i) -1 - j]
    k3 = k3 + ','
    k3 = k3 + a[0]
if len(k1) % 3 == 2:
    for i in range(len(k1)//3):
        if i != 0:
            k3 = k3 + ','
        for j in range(3):
            k3 = k3 + k1[len(k1) -  (3 * i) -1 - j]
    k3 = k3 + ','
    k3 = k3 + a[1] + a[0]



k4 = ''.join(reversed(k3))
k4 = k4 + '.' + k2
print(k4)

2018/03/31 14:15

최성범

library(stringr)
library(dplyr)
AddComma <- function(x){
  x <- as.character(x)
  point <- str_extract(x, '\\.\\d{1,}')
  point <- ifelse(is.na(point), '', point)
  x <- str_replace(x, '\\.\\d{1,}', '')
  number <- nchar(x)
  if(number < 4) return(x)
  first <- ifelse(number%%3 == 0, number%%3, number%%3 + 1)

  comma <- ifelse(number %% 3 == 0, (number %/% 3)-1, number %/% 3)
  tmpvec <- rep(NA, number+comma)
  tmpvec[seq(first, number, 4)] <- ','
  tmpvec[-seq(first, number, 4)] <- x %>% str_split('') %>% unlist

  result <- tmpvec %>% paste(collapse = '')  
  result <- paste(result, point, sep = '')
  return(result)
}
AddComma(100)
[1] "100"
AddComma(100000)
[1] "100,000"
AddComma(1000)
[1] "1,000"
AddComma(100000)
[1] "100,000"
AddComma(1000.123)
[1] "1,000.123"

chaining을 위해 dplyr 패키지를 사용했습니다. 텍스트 처리를 위해 stringr 패키지를 사용했습니다.

일단 소수점은 떼놓고 맨 마지막에 붙였습니다. 필요한 쉼표수와 쉼표의 위치를 3의 나머지와 몫을 이용해서 구했습니다. 벡터에 구해진 쉼표의 위치에 각각 쉬표를 집어넣었고 나머지 자리에는 입력받은 숫자를 한개씩 집어넣었습니다. 그 후 벡터를 paste로 합쳤습니다.

2018/04/28 16:37

권석현

def comma(n):
    num = str(abs(int(n)))[::-1]
    result = ''
    for l, m in enumerate(num):
        result += m
        if not (l + 1) % 3 and len(result) < len(num):
            result += ','
    if n < 0: result += '-'
    result = result[::-1]
    if n % 1: result += '.' + str(n).split('.')[1]
    return result
print(comma(1000))        # 1,000
print(comma(20000000))    # 20,000,000
print(comma(-3245.24))    # -3,245.24

Python 3입니다

정규식으로 푸신분들 보니까 자괴감드네요...

2018/05/18 22:28

myyh2357

import java.util.Scanner;

public class CommaInsert {
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        String Num = sc.nextLine(), temp = Num;
        Num = Num.startsWith("-") ? Num.substring(1) : Num;
        Num = Num.indexOf(".") > -1 ? Num.substring(0, Num.indexOf(".")) : Num;
        String tempArray[] = new String[(Num.length() - 1) / 3];
        for (int i = 0; i < (Num.length() - 1) / 3; i++)
            tempArray[i] = "," + Num.substring(Num.length() - 3 * (i + 1), Num.length() - 3 * i);
        Num = Num.substring(0, Num.length() % 3 == 0 ? 3 : Num.length() % 3);
        System.out.print(temp.startsWith("-") ? "-" + Num : Num);
        for (int i = tempArray.length - 1; i > -1; i--)
            System.out.print(tempArray[i]);
        System.out.println(temp.indexOf(".") > -1 ? temp.substring(temp.indexOf(".")) : "");
    }
}

2018/05/24 21:14

김지훈

def money(num):
    inte = num.split(".")[0].split("-")[-1]
    floa = "."+ num.split(".")[-1]
    num_list = list(inte)
    for i in range(3,int(len(num_list)*(4/3)-1), 4):
        num_list.insert(-i, ',')
    inte = "".join(num_list)
    if num.find(".") > 0 :
        if num.find("-") >= 0: return "-"+inte+floa
        else : return inte+floa
    else:
        if num.find("-") >= 0 : return "-"+inte
        else : return inte


print(money("-3456.7789"))

2018/05/29 16:25

yijeong

Python

test = ["1000", "20000000","-3245.24","123859812394","26385128793.12364089"]
for t in test:
    a = t.split(".")
    ans = ""
    for i, c in enumerate(a[0][::-1]):
        if i%3 == 0 and i != 0:
            ans += ","+c
        else:
            ans += c
    ans = ans[::-1]
    if len(a) != 1:
        ans += "."+a[1]
    print(ans)
    #print()

2018/06/22 18:10

Taesoo Kim

def ins_com(n):
    n = str(n)
    if n.find('.') == -1:
        return ''.join(reversed([','+n[i] if i%3 == 0 and i != -len(n) else n[i] for i in reversed(range(-len(n),0))]))
    else:
        return ''.join(reversed([','+n[:n.find('.')][i] if i%3 == 0 and i != -len(n[:n.find('.')]) else n[:n.find('.')][i] for i in reversed(range(-len(n[:n.find('.')]),0))])) + n[n.find('.'):]

ns = [1000, 20000000, -3245.24]
print(tuple(map(ins_com,ns)))


2018/07/05 18:13

Creator

파이썬3 (자연수만 하였습니다. 실수의 경우 .의 유무를 조사한 후 그 지점으로부터 3칸씩 콤마를 찍으면 됩니다.)

data = input("숫자 입력:")

data_reverse = list(data[::-1])
comma_count = (len(data_reverse) - 1) // 3
for i in range(comma_count):
    data_reverse.insert((4 * i + 3), ",")
result = "".join(data_reverse[::-1])
print(result)

2018/07/11 07:12

WJ K

static string ParseToCurrency(double aNumber)
        {
            string head = String.Empty, body, tail = String.Empty;
            // 기호 부분 => head
            var aString = aNumber.ToString();
            if (aString[0] == '+' || aString[0] == '-')
            {
                head = new string(aString[0], 1);
                aString = aString.Substring(1);
            }
            // 소숫점 이하 => tail
            var aSplit = aString.Split(new char[] { '.' });
            tail = (aSplit.Length > 1) ? "." + aSplit[1] : string.Empty;
            // 숫자 몸통 => commarizedBody
            body = aSplit[0];
            string commarizedBody = string.Empty;
            for (int idx = 0; idx < body.Length; idx++)
            {
                if (idx != 0 && idx % 3 == 0) { commarizedBody = "," + commarizedBody; }
                commarizedBody = body[body.Length - idx - 1] + commarizedBody;
            }
            return head + commarizedBody + tail;
        }

2018/07/11 16:02

mohenjo

        static void Main(string[] args)
        {
            int num, nLength, temp = 0;
            string strInput = Console.ReadLine().Trim();
            bool numberCheck = int.TryParse(strInput, out num);

            if (numberCheck == false)
            {
                temp = strInput.LastIndexOf(".");   //소수점 위치 index
                if (temp < 0) //있을 경우 위치 index, 없을 경우 -1
                {
                    Console.WriteLine("숫자를 입력하세요");
                    strInput = Console.ReadLine().Trim();
                }
            }

            nLength = strInput.Length;

            if (temp > 0)   //소수점있을 경우
            {
                for (int i = 3; i < temp; i += 3)
                {
                    strInput = strInput.Insert(temp - i, ",");
                }
            }
            else if (nLength > 3)
            {
                for (int i = 3; i < nLength; i += 3)
                {
                    strInput = strInput.Insert(nLength - i, ",");
                }
            }
            Console.WriteLine(strInput);
        }

2018/07/13 01:10

정태식

n = input()
d = ''

if n.find('.') != -1:
    n,d = n.split('.')
    d = '.' + d

nn = ''
for idx,i in enumerate(n[::-1]):
    nn += i
    if (idx + 1) % 3 == 0:
        nn += ','

print(nn[::-1] + d)

2018/07/22 21:24

구름과비

#include<iostream>
#include<string>

using namespace std;

int number(string Money)
{
    int num = 0;
    int prime = 0;

    prime = Money.find(".");                            // 소수 위치 찾기

    if (Money.substr(0, 1) == "-" && prime == -1)       // 숫자가 -이면 1
        num = 1;
    else if (Money.substr(0, 1) != "-" && prime != -1)    // 숫자가 -가 아니고 소수면 2
        num = 2;
    else if (Money.substr(0, 1) == "-" && prime != -1 )   // 숫자가 0이고 소수이면 3
        num = 3;
    else                                                // 숫자가 -도 아니고 소수도 아니면 4
        num = 4;
    // 숫자 리턴
    return num;
}

string Select(string Money, int num)
{
    int pos = 3;
    int flag;

    switch (num)                                            // 리턴받은 숫자를 switch로 선택
    {
    case 1:
        flag = Money.find("-", 0);
        for (int i = 0; i <(int)Money.length() / 4; i++)            // - 면 문자길이 / 4 만큼 반복
        {
            Money.insert(Money.length() - pos + flag, ",");
            pos += 4;
        }
        break;
    case 2:
        pos = 6;
        for (int i = 0; i < (int)Money.length() / 6; i++)
        {
            Money.insert(Money.length() - pos, ",");                // 소수면 문자길이 / 6만큼 반복
            pos += 4;
        }
        break;
    case 3:
        pos = 6;
        for (int i = 0; i < (int)Money.length() / 6; i++)           // 문자길이 / 6만큼 반복
        {
            Money.insert(Money.length() - pos, ",");
            pos += 4;
        }
        break;
    case 4:
        for (int i = 0; i < (int)Money.length() / 4; i++)           // 문자 길이 /4 만큼 반복
        {
            Money.insert((Money.length()) - pos, ",");
            pos += 4;
        }
        break;
    }

    return Money;
}

int main()
{
    string Money;

    cout << "숫자를 입력하시오>>";
    cin >> Money;

    // 출력
    cout << Select(Money, number(Money));
}

2018/08/04 20:58

Jun ki Kim

public class Number_Comma {
    public static void main(String[] args) {

        /*
         * 1) String 함수 사용하는 방식
         * - 숫자 사이에 '.'이 있는지 확인 
         * - '.'를 기준으로 뒷 자리부터 3번째 digit 사이에 ',' 삽입
         *   string 함수 사용 (concat?)
         * 
         * 2) 정규식 사용하는 방식
         */

        Scanner sc = new Scanner(System.in);
        String num, temp;
        int index;

        while (true) {
            num = sc.next();

            if(num.contains(".")) {
                index = num.indexOf(".");
                temp = num.substring(0, index);

                for(int i=temp.length(); i>3; i-=3) {
                    temp = new StringBuffer(temp).insert(i-3, ",").toString();
                }

                temp.concat(num.substring(index));
                System.out.println(num);
            }
            else {
                for(int i=num.length(); i>3; i-=3) {
                    num = new StringBuffer(num).insert(i-3, ",").toString();
                }
                System.out.println(num);
            }
        }
    }
}

2018/08/22 15:35

송보근

num = input()
site=''
fak=''
if num.find('-')!=-1:
    site='-'
    num=num[1:]
a=num.find('.')
if a !=-1:
    fak=num[a:]
    num=num[:a]
num=int(num)

res=''
temp=0

while num>= 1000:
    temp = num%1000
    num=num//1000
    res=','+str(temp)+res
res=site+str(num)+res+fak
print(res)

2018/08/30 13:20

JaehakChoi

def Comma_number(raw_number):
    if raw_number[0] in ['+', '-']:
        sign = raw_number[:1]; num = raw_number[1:]
    else: 
        sign = ''; num = raw_number

    if(num.find('.') != -1):
        integer_part, fixed_point_part = num.split('.')
        fixed_point_part = '.'+fixed_point_part
    else:
        integer_part = num; fixed_point_part = ''

    count_of_comma = (len(integer_part)-1)//3  #','의 개수
    i = len(integer_part) % 3
    if i==0: i=3
    while(count_of_comma > 0):
        integer_part = integer_part[:i]+','+integer_part[i:]
        i += 4; count_of_comma -= 1

    return sign+integer_part+fixed_point_part

while(True):
    raw_number = input()
    try:
        raw_number_to_int = float(raw_number)
    except:
        break
    comma_number = Comma_number(raw_number)
    print(comma_number)

2018/09/01 21:54

박용주

def comma(i_string):
    string = ''
    ss = ''

    s_return = ''
    m = 0
    p = 0

    if i_string.find('.') != -1:
        p = 1
        for k in range(0,i_string.find('.')):
            string = string + i_string[k]
        for j in range(i_string.find('.')+1,len(i_string)):
            ss = ss + i_string[j]
    else:
        string = i_string

    if int(string) < 0:
        m = 1
        string = str(int(string) * -1)

    length = len(string)+1
    n = 1

    if length > 4:
        for i in range(1,length):
            i = i * -1
            s_return = string[i]+s_return
            if n%3 == 0 and n != (length-1):
                s_return = ','+s_return
            n += 1
    else:
        s_return = string

    if m == 1: 
        s_return = '-'+s_return

    if p == 1:
        s_return = s_return +'.'+ss  

    return s_return    

print(comma('-3245.24'))

2018/11/08 14:52

Dae Su Jeong

import java.util.Scanner;

public class KimSanghyeop
{
    public static void main(String[] args)
    {
        int f1,f2;

        // 입력부 
        Scanner sc = new Scanner(System.in);
        double num1 = sc.nextDouble();

        // 쪼개기
        String[] etc = String.valueOf(num1).split("\\.");


        String temp="";
        char[] arr_char = etc[0].toCharArray();

        // 컴마 넣기 
        for(f1=0;f1<arr_char.length;f1++)
        {
            temp+=arr_char[arr_char.length-f1-1];

            if((f1+1)%3==0 && f1 <arr_char.length-1)
            {
                temp+=",";
            }
        }
        // 뒤집기
        String res="";

        for(f1=0;f1<temp.length();f1++)
        {
            res+=temp.substring(temp.length()-1-f1,temp.length()-f1);
        }

        if(!etc[1].equals("0"))
        {
            res= res + "."+etc[1];
        }

        System.out.println(res);
    }
}

2018/11/15 16:37

김상협

clc;
clear;

n=input('자연수 입력: ');
sn=num2str(n);
l=length(sn);%자릿수
h=struct;
k=0;
for i=1:l
    %뒤부터 3개씩 묶기
    if rem(i,3)==0
        k=k+1;
        ssn=sn(l-i+1:l-i+3);
        h(k).c=ssn;
    end
end
%맨 앞자리수(1~2개)
j=rem(l,3);
h(k+1).c=sn(1:j);
%3자리씩 ','로 결합
shs=[];
for x=1:k
    h(x).d=h(k+2-x).c;
    h(x).e=strcat(h(x).d,',');
    if x>=2
        h(x).e=strcat(h(x-1).e,h(x).e);
    end
    if x==k
        ssh=strcat(h(x).e,h(1).c);
        disp(ssh);
    end
end

2018/12/12 15:50

GammaKnight

Java 8

package test;

import java.util.ArrayList;
import java.util.List;
import java.util.Set;
import java.util.stream.Collectors;
import java.util.stream.IntStream;

public class tut04 {
  public static void main(String[] args) {
    System.out.println("hello world");

    String input = "-3245.24";
    List<String> list= new ArrayList<>();

    // 음수로 바꿔서 비교해보자.
    if (Double.parseDouble(input) < 0) {
      list.add("-");
      input = input.substring(1);
    }

    // 소수점 확인.
    String decimalPoint = input.replaceAll("^[+-]?\\d*", "");
    input = input.replaceAll("([.,][0-9]+)?", "");

    // 부호, 소수점을 제외한 부분 확인.
    Set<Integer> set = IntStream.rangeClosed(1, input.length()/3)
        .mapToObj(i -> 3 * i)
        .collect(Collectors.toSet());

    // 문자열 Looping
    char[] chrs = input.toCharArray();
    for (int i = chrs.length-1; i >= 0; i--) {
      // 값을 채워주면서...
      list.add(chrs[(input.length() - 1) - i] + "");

      // 자리수에 ',' 를 추가한다.
      if (set.contains(i)) {
        list.add(",");
      }
    }

    // 소수점 합치기.
    list.add(decimalPoint);
    System.out.println(String.join("", list));
  }
}

2018/12/13 09:13

def digit(num):
    k = list(str(num))
    d = len(k)-1
    p = 0

    dot = str(num).find('.')

    if dot > 0:
        d = dot-1
        p = len(k) - dot

    if k[0] == '-':
        d -= 1

    n = d//3

    print(dot, n)

    for i in range(1, n+1):
        k.insert(-3*i-(i-1)-p, ',')

    return ''.join(k)

num = -1000000.00
print(digit(num))

-1,000,000.0

2018/12/27 15:54

조현우

a='-3245.24'
b=a.split('.')

comma=len(b[0])-3
result=list(b[0])

while True:
    result.insert(comma,',')    
    comma-=3
    if comma <1:
        break

if '.' in a:
    print(''.join(result)+'.'+''.join(b[-1]))
else:
    print(''.join(result))

2018/12/30 15:57

S.H

def adding_comma(word):
    if len(word) == 0:
        return False
    sign = ''
    if '-' == word[0]:
        sign = '-'
        word = word[1:]
    word_chunk = word.split('.')
    first  = word_chunk[0]
    second = ''
    if len(word_chunk) > 1:
        second = word_chunk[-1]
    length = len(first)
    pos = length % 3
    while pos <= length:
        first = first[:pos] + ',' + first[pos:]
        length-= 2
        pos += 4
    word = sign + first
    if '' != second:
        word += '.' + second
    return word

test_set = ['1000', '20000000', '-3245.24']
for innum in test_set:
    print(adding_comma(innum))

2019/01/13 15:07

Roy

number = input()


def check_comma(num):
    if '-' in num:
        comma_list = []
        for n in num:
            comma_list.append(n)
        comma_count = (len(comma_list) - 2) // 3
        return comma_list, comma_count
    else:
        comma_list = []
        for n in num:
            comma_list.append(n)
        comma_count = (len(comma_list) - 1) // 3
        return comma_list, comma_count


if '.' in number:
    number_split = number.split('.')
    number_int = number_split[0]
    number_list, comma = check_comma(number_int)
    while comma > 0:
        number_list.insert(-(comma * 3), ',')
        comma -= 1
    result = ''
    for x in number_list:
        result += x
    result += '.' + number_split[1]
    print(result)
else:
    number_list, comma = check_comma(number)
    while comma > 0:
        number_list.insert(-(comma*3), ',')
        comma -= 1
    result = ''
    for x in number_list:
        result += x
    print(result)



2019/01/17 17:14

농창

#include <iostream>
#include<string>
#include <vector>


using namespace std;

int main(void)
{
    int cnt = 0;
    string s;
    getline(cin, s);
    int num = s.length();
    for (int i = 1; i < s.length(); i++)
    {
        if (num - 3 * i <= 0)break;
        s.insert(s.length() - 3 * i-(i-1), ",");

    }
    cout << s;
}




2019/01/24 18:46

김상범

import re

def insertComma(s):
    m = re.match('([-]?)(\d+)([.]\d+)?', s)
    t0 = m.group(1)
    t1 = m.group(2)
    t2 = m.group(3)
    n = len(t1) - 3
    while n > 0:
        t1 = t1[:n] + ',' + t1[n:]
        n -= 3
    if t0: t1 = t0 + t1
    if t2: t1 = t1 + t2
    print(t1)

2019/04/30 15:10

messi

decimal = False
a = input()
num = a.split('.')

e = num[0] 
liste = list(e)

print(liste)

if(len(num)>1):
    decimal = True
    d = '.'+num[1]

for i in range(len(liste)-1,0,-1):
    if((len(liste)-i) % 3 == 0):
        if(liste[i] != '-'):
            liste.insert(i,',')



if(decimal==True):
    print(''.join(liste)+d)
else:
    print(''.join(liste))

2019/06/27 22:50

야어이구

#include <iostream>
#include <string>
using namespace std;

string add_num_comma(string str)
{
    size_t pos_sign = 0;  // 부호가 존재하면 1, 없으면 0
    string sign = "";  // 부호가 있을 경우 부호 저장
    size_t pos_dot = str.find('.');
    string dot = "";  // 소수점을 포함한 소수 부분을 저장할 문자열
    if (str[0] == '+' || str[0] == '-')  // 문자열에 부호가 있다면
    {
        pos_sign = 1;
        sign = string(1, str[0]);
    }
    if (pos_dot != string::npos)  // 문자열에 소수점이 있다면
    {
        dot = str.substr(pos_dot);
    }

    string tmp = str.substr(pos_sign);
    size_t replace_len = tmp.size() - dot.size();  // 소수 부분과 부호를 제외한 문자열의 길이

    for (int i=replace_len - 1; i > 0; --i)  // ',' 추가
    {
        if ((replace_len - i) % 3 == 0)
        {
            tmp.insert(i, ",");
        }
    }

    return sign + tmp;  // 결과 반환
}

int main()
{
    string num;
    cin >> num;  // 문자열 입력

    cout << add_num_comma(num) << endl;
    return 0;
}

2019/07/19 13:12

드드드드드드

string comma(string s){
    char * stack = new char[s.size()];
    string answer = "";
    int ssize=0;
    for(int i = 0;i<s.size();i++,ssize++) if(s[i]=='.') break;
    for(int i=0;i<ssize;i++){
        answer += s[i];
        if((ssize-i)%3==1 && (ssize-i) > 1 && isdigit(s[i])) answer+=',';
    }
    for(int i = ssize;i<s.size();i++) {
        answer += s[i];
        if((i-ssize) %3 == 0 && i-ssize != 0) answer += ',';
    }
    return answer;
}

2019/09/10 02:36

김한길

amount = input("amount to be formatted: ")
amountFormatted = ''
index = 0
sign = ""
if amount[0] == '-':
    amount = amount[1:]
    sign = '-' 
if amount.find(".") != -1:
    [amount, floats] = amount.split(".")
while len(amount) > 3:
    amountFormatted = ',' + amount[-3:] + amountFormatted
    amount = amount[:-3]
print(sign + amount + amountFormatted + '.' + floats)

2019/09/22 23:47

ikc

inp = input("input :")
kigou = ''
if '-' in inp :
    kigou, inp = kigou+'-', inp[1:]
if '.' in inp :
    ari = inp.split('.')
else :
    ari = eval('['+inp+']')
fir = []
while len(str(ari[0])) > 3 :
    fir.append(str(ari[0])[-3:])
    ari[0] = str(ari[0])[:-3]
fir.reverse()
if not fir :
    result = kigou+str(ari[0])+','.join(fir)
else :
    result = kigou+str(ari[0])+','+','.join(fir)
if len(ari) >= 2 :
    result +='.'+str(ari[1])
print(result)

결과

input :-18241264127498.192461294 -18,241,264,127,498.192461294

정규표현식 쓰려다가 머리가 쪼개질거같아서 그냥 길게 썼습니당 ㅠㅠㅠ

2019/10/02 11:36

GG

import java.util.Scanner;
public class CommaQuiz {
    public static boolean check(int size) {
        int tmp = size - 4;
        if(tmp % 3 == 0) return true;
        else return false;
    }

    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);
        int sw = 0, sw2 = 0, start = 0, size = 0, j = 0;
        String ans = scanner.nextLine();
        StringBuffer result = new StringBuffer(ans);

        if(ans.indexOf(".") > 0) size = ans.indexOf(".");
        else size = ans.length();

        if(ans.indexOf("-") == 0) {
            start = 1;
            size--;
        }

        if((size % 3) != 0) sw = -1;
        if(size == 4 || check(size) == true) {
            sw = -2; sw2 = 1;
        }
        for(int i = start; i < size;i++) {  
            if(j == 3) {
                result.insert(i + sw, ",");
                sw++;
                j = 0;
            }
            j++;
            if(j == 2 && i == (size - 2)) {
                j++;
                sw++;
            }
        }   
        System.out.println(result);
    }
}

허접은 노가다로 풉니다 ㅠ 다른분들 정말 대단하십니다. ㅠㅠ 그래도 나름 공부 많이 됬습니다...

2019/10/19 00:57

이유환

Ntest = input()
N = ""
Ntemporary = ""
Ntemporary1 = ""
check = 0
for i in range(1, len(Ntest)+1):
    if Ntest[i-1] == '.':
        N = Ntest[:i-1]
        Ntemporary = Ntest[i-1:]
if Ntemporary == "":
    N = Ntest
if N[0] == '-':
    Ntemporary1 = N[:1]
    N = N[1:]
check = len(N)
check1 = 0
breakint = 0
while(check > 0):
    int(N[check-1])
    check1 += 1
    if N[:check-1] != '':
        if check1 == 3:
            check1 = 0
            N = N[:check-1] + ',' + N[check-1:]
    check -= 1
print(Ntemporary1 + N + Ntemporary)


2020/02/11 16:03

BlakeLee

python 3.8

a=input().split('.')
for i in range((len(a[0])-[1,2][a[0].find('+') or a[0].find('-')]) // 3):
    a[0]=a[0][:-(i+1)*3-i]+','+a[0][-(i+1)*3-i:]
print('.'.join(a))

ㅡㅡㅡㅡㅡㅡㅡㅡㅡ

a=input()
for i in range((a.index('.')-[0,1][a.find('-') or a.find('+')]) // 3):
   a=a[:-(i+1)*3-i-(len(a)-a.index('.'))]+','+a[-(i+1)*3-i-(len(a)-a.index('.')):] 
print(a)

# 위는 입력값을 정수부, 소수부로 분해 후 (+,-)를 확인하여 있다면 2 없다면 1을 빼준 후, 정수부의 (,)를 입력할 총갯수를 구해 for 문으로 (,) 삽입할 때 (,)값과 3자리를 이동하여 반복하고, 최종 리스트를 (.)으로 join하면 값이 구해집니다.

# 아래는 (.)지점과(+,-)를 찾은 후 삽입할 (,) 갯수만큼 for로 바로 문자열에 (.)에서 L방향으로 이동하며 (,)를 삽입

# 재귀함수가 제일 깔끔합니다.

# print(format(num,',d'))이면 간단한데 못쓰네요. str->int,float

# print(f"{num:,d}")형식

2020/03/17 01:52

mr. gimp

python 입니다.

iv = str(-3245.24)
ivs = iv.split('.')

ivl = list(ivs[0])
ivl.reverse()

rt = []

for i in range(0, len(ivl)):
    if (i+1) % 3 == 0:
        rt.append(ivl[i])
        rt.append(',')
    else:
        rt.append(ivl[i])

rt.reverse()

if len(ivs) > 1:
    print(''.join(rt) + '.' + ivs[1])
else:
    print(''.join(rt))

2020/03/28 13:54

뤼크

다른 분들은 다하는 정규표현식, 재귀함수 이런거 생각도 못하고 의식의 흐름대로 작성한 내용 올려봅니다^^ 다른분들거 보니 생각을 전화해야할 곳이 한두곳이 아니네요

res=''
minus_flag = False
float_flag = False

input_num = input('숫자만 입력해주세요 (음수 및 소수점가능):')
if input_num.isdigit() == False:
    print('숫자만 입력해주세요 다시 시작해주세요')
    exit()

# 소수 여부 확인 및 처리 (True인 경우 마지막에 결과 문자열 후반분에 소수점을 붙인다)
if input_num.find('.') > 0:
    float_flag = True
    float_str = input_num[input_num.rfind('.'):len(input_num):1]
    input_num = input_num.replace(float_str, '')

# 음수 여부 확인 및 처리 (True인 경우 마지막에 결과 문자열 앞에 '-'를 붙인다)
if int(input_num) < 0:
    minus_flag = True
    input_num = input_num[1:len(input_num)]

# 0으로 시작하는 문자를 입력한 경우 해당 앞부분의 0을 지운다
# 소수와 마이너스를 제외한 순수 숫자열의 글자 크기를 확인한다 
input_num = int(input_num)
input_num = str(input_num)
(container, remainer) = divmod(len(input_num), 3)

# 3자리가 아닌 경우 앞부분을 먼저 결과 문자열에 넣는다
if remainer != 0:
    res = res + input_num[0:remainer] + ','
    input_num = input_num[remainer:len(input_num)]

# 나머지 부분 몫의 크기만큼 반복하면서 3자리씩 구분하고 컴마를 붙인다
for i in range(container):
    if i == container-1:
        res = res + input_num[i*3:i*3+3]
    else:
        res = res + input_num[i*3:i*3+3] + ','

# 소수점과 마이너스 부분 여부를 확인후 추가한다
if float_flag:
    res = res + float_str
if minus_flag:
    res = '-' + res

print(res)

2020/04/02 17:28

잘해보자

#include <iostream>
#include <list>
#include <string>
using namespace std;
/*
숫자 형태의 문자열을 콤마가 포함된 금액 표기식 문자열로 바꾸어주는 프로그램을 작성하시오.
※ 단, 프로그래밍 언어에서 지원하는 금액변환 라이브러리는 사용하지 말것

예)
숫자  금액
1000        1,000
20000000    20,000,000
-3245.24    -3,245.24
*/
void Func(string s) {
    cout << s << " -> ";
    list<char> l; //정수용
    list<char> s_; //소수용
    char c = ' '; //부호 저장용
    bool check = true; //소수 부분이 있는지 체크하는용
    for (int i = 0; i < s.length(); i++) {
        if (i == 0 && s[i] == '-') { c = '-'; continue; }
        if (s[i] == '.') { check = false; }
        if (!check) { s_.push_back(s[i]); continue; }
        l.push_front(s[i]);
    }

    int count = 0;
    list<char>::iterator iter = l.begin();
    iter++;
    for (; iter != l.end(); iter++) {
        count++; if (count == 3) { l.insert(iter, ','); count = 0; }
    }
    l.reverse();

    cout << c;
    for (list<char>::iterator iter = l.begin(); iter != l.end(); iter++)
        cout << *iter;
    for (list<char>::iterator iter = s_.begin(); iter != s_.end(); iter++)
        cout << *iter;
    cout << endl;
}

int main() {
    Func("1000");
    Func("20000000");
    Func("-99999999999");
    Func("-3245.24");
    Func("123456789.0000001");
}

2020/04/08 15:46

++C

def change(list_a,LEN):
    count = 1
    if list_a[0]=="-":
        Min=1
    else:
        Min=0
    for i in range(LEN, Min, -1):
        if count % 3 == 0:
            money.insert(i, ',')
            count = 0
        count += 1
    print("".join(money))

money=list(input("숫자 입력 : "))
sign=0
for i in range(len(money)):
    if money[i]=='.':
      sign=i
if sign==0:
    change(money,len(money)-1)
else:
    change(money,sign-1)

2020/04/26 22:11

kim center

def convert(x):
    print ()
    p_p=x.find('.')
    if x[0]=='-':
        print('-',end='')
        if p_p==-1:
            temp=x[1:]
        else:
            temp=x[1:p_p]
    else:
        if p_p==-1:
            temp=x
        else:
            temp=x[:p_p]

    n=0
    temp2=int(temp)
    while (temp2>999):
        n+=1
        temp2=temp2//1000

    temp_a=[]
    for i in range (len(temp)):
        temp_a.append(temp[i])
    temp=temp_a

    p=len(temp)-3
    for i in range (0,n):
        temp.insert(p,',')
        p-=3
    temp=''.join(temp)

    print (temp,end='')
    if p_p != -1:
        print (x[p_p:],end='')

convert('-1000')    
convert('20000000')
convert('-3245.24')
convert('12345678.24')
convert('2000')

2020/05/18 13:14

Buckshot

<댓글> -1,000 20,000,000 -3,245.24 12,345,678.24 2,000 - Buckshot, 2020/05/18 13:14
def type(inp):
    t = [float(a) if '.' in a else int(a) for a in inp]
    for i in t:
        print('{:,}'.format(i))

if __name__ == '__main__':
    inp = ['1000', '20000000', '-3245.24']
    type(inp)

2020/06/08 09:30

Hwaseong Nam

{:,} 배워갑니다 - 약사의혼자말, 2021/06/28 10:12
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Scanner;

public class main {

    public static void main(String[] args) {
        Scanner scan = new Scanner(System.in);
        System.out.println("원하는 숫자 입력하세요!");
        String num_a = scan.nextLine(); // 숫자 입력 받기

        int com = (num_a.length()-1)/3;
        int noncom = num_a.length()%3;

        StringBuffer num_b = new StringBuffer(num_a);// 뒤집에서 다른 string에 넣기 용
        num_b = num_b.reverse();

        StringBuffer num_c = new StringBuffer();// 결과로 쓸 string

        int index=0;

        for(int i=0;i<com;i++) // 제일 앞에 남을 숫자들 빼고 입력 ex) 21,320 의 경우 320까지만!
        {
            num_c = num_c.append(num_b.charAt(index++)).append(num_b.charAt(index++)).append(num_b.charAt(index++)+",");
        }
        for(int i=0;i<noncom;i++)// ex) 21,320 의 경우 21만!
        {
            num_c = num_c.append(num_b.charAt(index++));
        }

        num_c.reverse();
        System.out.println(num_c);


    }

}

StringBuffer.reverse에 대해 배웠당 StringBuilder 말고 StringBuffer 도 동일하게 append쓴당. 마이너스는 일단 보류

2020/07/21 00:43

허병우

import math

def comma(n):
    temp = ""
    result = ""
    x = str(int(math.modf(n)[1]))
    y = str(round(abs(math.modf(n)[0]),2))[1:] if round(abs(math.modf(n)[0]),2)!=0 else ""
    z = x[::-1]
    for j in range(len(z)):
        temp += z[j]
        if len(temp) % 3 == 0:
            temp += ","
            result += temp
            temp = ""
        if j == len(z)-1:
            result += temp

    print(result[::-1]+y)


comma(1000)
comma(20000000)
comma(-3245.24)

2020/12/17 18:35

김우석

왠만하면... algorithm() 이거 안 쓰고 싶었는데... 제 알고리즘이 이상해서... 어쩔 수 없이 추가했습니다.
algorithm() 이거 없으면 -123456.1234 이런 식으로 정수부분이 3의 배수(3,6,9) 자릿수일 때 -,123,456.1234 이런 식으로 나와서 넣어버렸습니다.
제 알고리즘을 고치는 것이 바람직하긴 한데 귀찮아서 안했습니다.

#include <iostream>
#include <string>
#define LEN 100
using namespace std;

string msg;

void getmsg();
void print();
int getcomma();
void push(int);
void algorithm();

int main() {
    getmsg();
    int find = getcomma();
    int size= msg.length();
    int count=0;
    // float인 경우
    if(find!=-1) {
        for(int i = find;i>=0;i--) {
            if(msg[i]=='-') {
                break;
            }
            if(count%3==0 && count>0) {
                push(find-count);
            }
            count++;

        }
    }
    //int인 경우
    else {
        for(int i =size-1;i>=0;i--) {
            if(msg[i]=='-') {
                break;
            }
            if(count%3==0 && count>0) {
                push(size-count);
            }
            count++;
        }
    }
    algorithm();
    print();
    return 0;
}


void getmsg () {
    cin >> msg;
}

void print() {
    cout <<msg << endl;
}

int getcomma() {
    int find=-1;
    for(int i=0;i<msg.length();i++) {
        if(msg[i]=='.') {
            find = i;
            break;
            cout << find << endl;
        }       
    }
    return find;
}

void push(int num) {
    msg.resize(msg.length()+1);
    for(int i = msg.length()-1;i>=num;i--) {
        msg[i+1]=msg[i];
    }
    msg[num]=',';
}

void algorithm() {
    if (msg[0]==',') {
        for(int i =0;i<msg.length();i++) {
            msg[i]=msg[i+1];
        }
    }
    else if(msg[1]==',' && msg[0]=='-') {
        for(int i=1;i<msg.length();i++) {
            msg[i]=msg[i+1];
        }
    }
}   

2020/12/21 23:03

배민준

def pointer(char):
    temp = ''
    a = char[::-1]
    for i in range(0, len(a), 3):
        temp += a[i:i+3] + ','
    a = temp[::-1]
    if a[0] == ',':
        temp = a[1:]
    return temp
a = str(input('enter the number: '))
if a.find('.') == -1:
    print(pointer(a))
else:
    idx = a.find('.')
    b = a[0:idx]
    print(pointer(b) + a[idx:])

고수분들이 많네요 ㅠㅠ 파이썬 3.9.1입니다

2021/02/05 01:38

김민수

a=-3245.24   
q=[]
t=1
i=1
if float(a)-int(a)==0:
    w=str(a)
    while i<len(w):
        q.append(w[-i])
        i+=1
    q.append(w[0])

    while 2*t+1<len(w):
        if t%2==1:
            q.insert(2*t+1,',')
            t+=1
        else:
            t+=1

    print(''.join(q)[::-1])

else:
    d = abs(float(a)-int(a))
    e=str(int(a))
    while i<len(e):
        q.append(e[-i])
        i+=1
    q.append(e[0])
    while 2*t+1<len(e):
        if t%2==1:
            q.insert(2*t+1,',')
            t+=1
        else:
            t+=1
    print(''.join(q)[::-1]+str(d)[1:])

2021/02/20 22:09

fox.j

그냥 간단히 자연수일때만 가정하고 짜봤습니다

def comma(cnt, number, res):
    if not number :
        res.reverse()
        ret = ''.join(res)
        print(type(ret))
        print(ret)
        return ret

    if cnt == 3 :
        res.append(',')
        return comma(0, number, res)
    else :
        res.append(number.pop(0))
        return comma(cnt+1, number, res)

number = 1235
a = list(str(number))
a.reverse()
res = comma(0, a, [])
print(res)


2021/02/26 15:47

sh l

def com(input):
    input =str(input)
    result = ''
    comma = ''

    if '.' in input :
        comma = input[input.find('.'):]
        input = input[:input.find('.')]

    input = input[::-1]
    count = 0

    for i in range(len(input)):
        count+=1
        if count%3==0:
            result += input[i]+','
        else : result += input[i]

    return result[::-1] + comma

print(com(-3245.24))
print(com(20000000000000))

2021/06/28 09:49

약사의혼자말

package justStudying;

public class test4_20210822 {

    public static void sol(String input) {
        String parse[] = input.split("\\.");

        String above = "";
        String less = "";
        String ans = "";

        if(parse.length > 0) {

            int count = 0;
            for(int i=parse[0].length()-1; i>=0; i--) {
                count++;
                above = parse[0].substring(i,i+1) + above;
                if(count%3 == 0 && i>0) {
                    if(i==1 && parse[0].substring(0,1).equals("-")) {}
                    else above = "," + above;
                }
            }
            if(parse.length > 1) {
            less = "." + parse[1];
            }
        } else {
            int count = 0;
            for(int i=input.length()-1; i>=0; i--) {
                count++;
                above = input.substring(i,i+1) + above;
                if(count%3 == 0 && i>0) {
                    if(i==1 && input.substring(0,1).equals("-")) {}
                    else above = "," + above;
                }
            }
        }

        System.out.println(parse.length);
        ans = above + less;
        System.out.println(ans);
    }

    public static void main(String[] args) {
        // TODO Auto-generated method stub
        String input = "-100000.05";
//      input = "-100000";
        sol(input);

    }

}

2021/08/22 18:05

이병호

// Rust

// 경우의 수 따지기 보다는 그냥 '.'으로 문자열 분리하고, 정수부분 거꾸로 뒤집어서 3개씩 세면서 ',' 넣어주고 합쳐서 뒤집었습니다

fn numeric_comma() {

let input = ["1000", "20000000", "-3245.24",];
for num in input {
    let mut iter = num.split('.');
    let mut n = iter.next().unwrap();   // &str
    let f = iter.next();            // Some or None
    let sign = if &n[..1] == "-" { n = &n[1..]; true} else { false };

    let mut result = String::new();
    for (i, ch) in n.chars().rev().enumerate() {
        result.push(ch);
        if (i + 1) % 3 == 0 { result.push(','); }
    }
    if sign { result.push('-'); }
    result = result.chars().rev().collect::<String>();
    if let Some(f_) = f { result += "."; result += f_}

    println!("{}", result);
}

}

2022/01/30 20:35

JW KIM

n = input('금액 표기식으로 변환할 숫자를 입력해주세요').split('.')
#부호 유무 확인하여 sign 변수에 할당
if list(n[0])[0] != '-':
    numb = list(n[0])
    sign =''
else:
    numb = list(n[0])
    sign = list(n[0])[0]
    numb.pop(0)
#소수점 유무 확인하여, 예외처리 및 remain 변수에 할당
try :
    remain = '.'+n[1]
except IndexError:
    remain = ''
m= len(numb)//3

print(numb)

# 소수점 자리수를 특정 index에 insert

for i in range(1,m+1):
    k = -3*i-(i-1)
    if k !=-len(numb):
        numb.insert(k,',')

print(sign+''.join(numb)+remain)

2022/02/04 03:05

양캠부부

자바로 풀어봤습니다.

import java.util.Scanner;
import java.util.ArrayList;

public class test {
    public static void main(String[] args) {
        Scanner scan = new Scanner(System.in);
        ArrayList<String> digits = new ArrayList<>();
        ArrayList<String> conversion = new ArrayList<>();

        System.out.println("숫자를 입력하시오:");
        String inputData = scan.next();
        String convertedNum = "";
        int count=0, result;

        for(int i=0; i<inputData.length(); i++) {
            digits.add(inputData.substring(i, i+1));
        }

        int size = digits.size();
        int position = digits.indexOf(".");

        if(position==-1) {
            for(int i=size-1; i>=0; i--) {
                conversion.add(0, digits.get(i));
                count++;

                if((count==3)&&(digits.get(0).equals("-"))&&(i==1)) {
                    continue;
                }else if((count==3)&&(i!=0)) {
                    conversion.add(0, ",");
                    count = 0;
                }
            }
        }else {
            conversion.add(".");
            for(int i=position+1; i<digits.size(); i++) {
                conversion.add(digits.get(i));
            }

            for(int i=position-1; i>=0; i--) {
                count++;
                conversion.add(0, digits.get(i));

                if((count==3)&&(digits.get(0).equals("-"))&&(i==1)) {
                    continue;
                }else if((count==3)&&(i!=0)) {
                    conversion.add(0, ",");
                    count = 0;
                }
            }           
        }

        for(int i=0; i<conversion.size(); i++) {
            convertedNum += conversion.get(i);
        }

        System.out.printf("\n금액은 %s원입니다.\n", convertedNum);
    }
}

2022/06/09 17:21

유로

자바로 작성하였습니다. 노가다코딩으로 만들어서 1000000까지만 구현되어있습니다.

import java.util.Scanner;

public class main {
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        System.out.println("입력하세요");
        int sc1 = sc.nextInt();
        int n1 = 0;
        int n2 = 0;
        int n3 = 0;
        if (sc1 > 1) {
            if (sc1 < 1000) {
                System.out.println(sc1);
            } else if (sc1 >= 1000 & sc1 < 1000000) {
                n1 = sc1 / 1000;
                n2 = sc1 - n1 * 1000;
                System.out.println(n1 + "," + n2);

            } else if (sc1 >= 1000000) {
                n1 = sc1 / 1000000;
                n2 = (sc1 / 1000) - n1 * 1000;
                n3 = (sc1 / 1) - (n2 * 1000) - (n1 * 1000000);
                System.out.println(n1 + "," + n2 + "," + n3);

            }

        }
        if (sc1 < 1) {
            sc1 = sc1 * -1;
            if (sc1 < 1000) {
                System.out.println(sc1);
            } else if (sc1 >= 1000 & sc1 < 1000000) {
                n1 = sc1 / 1000;
                n2 = sc1 - n1 * 1000;
                System.out.println("-" + n1 + "," + n2);

            } else if (sc1 >= 1000000) {
                n1 = sc1 / 1000000;
                n2 = (sc1 / 1000) - n1 * 1000;
                n3 = (sc1 / 1) - (n2 * 1000) - (n1 * 1000000);
                System.out.println("-" + n1 + "," + n2 + "," + n3);

            }
        }
    }
}

2022/08/03 20:47

부추부추

def Make_Comma(num):   # 함수 사용
    ctr = [num.count('-'), num.count('.'), num.find('.')]    # .의 위치는 -(len - find)
    result = [str(num[-i - 1]) if (((i <= (len(num)-ctr[2]+1)) and (ctr[1] != 0)) or ((i-len(num)+ctr[2]) % 3 != 0)) or (i == len(num) - 1) else '%s,' % num[-i - 1] for i in range(len(num))]
    return result

num = input("숫자를 입력해주세요 : ")
for i in Make_Comma(num)[::-1]:
    print(i , end='')

##############################################
# 함수 안쓰고 줄인 버전
num = input("숫자를 입력해주세요 : ")
num_ch = [num.count('-'), num.count('.'), num.find('.')]
for i in list([str(num[-i - 1]) if (((i <= (len(num)-num_ch[2]+1)) and (num_ch[1] != 0)) or ((i-len(num)+num_ch[2]) % 3 != 0)) or (i == len(num) - 1) else '%s,' % num[-i - 1] for i in range(len(num))])[::-1]:
    print(i, end='')

2022/08/23 21:24

고양이

# 012 : 숫자에 콤마 삽입하기

num = input()

length = len(num)

for i in range(length):
    print(num[i], end='')
    if i < length-1 and num[i+1] == '.':
        print(num[i+1:])
        break
    elif i != length-1 and (length-i) % 3 == 1 and i != length:
        print(',', end='')

2022/10/13 14:44

Jaeyoung Moon

파이썬입니다. 아직 포문이랑 if문만 이용을 잘하는 편이라 윗 분들이 쓰신 재귀함수나 클래스, 모듈 등에는 약하네요 ㅠ 정규식도 그렇고.. 그래도 주어진 대로 한 번 풀어봤습니다

a = input()
def moneyConvert(a):
    a0 = abs(int(float(a)))
    unit = len(str(a0))//3
    a = a.split(".")
    a1 = list(x for x in a[0])
    j = 0 
    for i in range(1,unit+1): 
        a1.insert(-3*i-j,',')
        j += 1
    A = ""
    for k in range(0,len(a1)):
        A += str(a1[k])
    if len(a) == 1:
        return A
    else:
        return A + "." + a[1]


print(moneyConvert(a))

2022/11/04 13:18

이웅기

strValues = input().split('.')# '.'을 기준으로 입력 나눠받기

strResult=""
count=0
for i in range(len(strValues[0]),0,-1):#정수부 뒷자리부터 차례대로 입력받되
    count+=1
    if(count>=3 and i!=1):
        count=0
        strResult=','+strValues[0][i-1]+strResult#count3마다 ','입력
    else:
        strResult=strValues[0][i-1]+strResult

try :
    strResult+='.'+strValues[1]
except IndexError:
    strResult=strResult#만약 소수점 아래가 없다면 예외 처리 소수점 아래 출력x

print(strResult)

2023/03/12 17:17

Sol Song

Python 입니다.

num = input('Comma 없는 숫자 입력 : ')
num_sp = num.split('.')   # 실수의 정수부, 소숫점 이하 분리 

# Floating number의 정수부 
num_lst = []
for idx, cha in enumerate(reversed(num_sp[0])):
    if (idx+1) == len(num_sp[0]):
        num_lst.append(cha)
    elif (idx+1) % 3 == 0:
        num_lst.append(cha + ',')
    else:
        num_lst.append(cha)

num_int = ''.join(num_lst)
num_int = ''.join(reversed(num_int)) 

# Floating number의 소숫점 이하와 결합  
if len(num_sp) == 2:
    num_str = num_int + '.' + num_sp[1]
else:
    num_str = num_int

print(num_str)

2023/09/03 12:18

Dongyoon Kim

number = input()

minus = ''
if number[0] == '-':
    minus = '-'
    number = number[1:]

decimal = ''
point_idx = number.find('.')
if point_idx != -1:
    decimal = number[point_idx:]
    number = number[:point_idx]

number_len = len(number)
print(minus, number[:number_len % 3], sep='', end='')
for i in range(number_len // 3):
    starting_index = number_len % 3 + i * 3
    print(',', number[starting_index:starting_index + 3], sep='', end='')
print(decimal)

2023/12/08 17:48

윤영식

def insert_comma(num):
    cnt = 1
    result=''
    if num.find('.') > -1:
        num, result = num[:num.find('.')], num[num.find('.'):]
    for i in range(len(num)-1,-1,-1):
        if cnt % 3 == 0 and num[i] != '-':
            result = num[i] + ','+ result
        else:
            result = num[i] + result
        cnt += 1
    return result

num = input('>>> ')
print(insert_comma(num))

2024/02/16 19:49

insperChoi

number=input()

if number.find('.')==-1:
    list_number=list(number)
    print(list_number)

    list_rest_number=[',' for a in range(20)]
    print(list_rest_number)

    a=len(list_rest_number)-1
    b=1
    for c in range(len(list_number)-1,-1,-1):
        if b%4==0 and list_number[c]!='-'and list_number[c]!='+':
            a-=1
            list_rest_number[a]=list_number[c]
            b=1
        else:
            list_rest_number[a]=list_number[c]
        a-=1
        b+=1
    print(list_rest_number)
    print(''.join(list_rest_number).lstrip(','))
else:
    real_number_index=number.find('.')
    print(real_number_index)

    list_number=list(number)
    print(list_number)

    list_rest_number=[',' for a in range(20)]
    print(list_rest_number)

    a=len(list_rest_number)-1
    list_rest_number[a]=list_number[real_number_index]
    a-=1
    print(list_rest_number)
    b=1
    for c in range(real_number_index-1,-1,-1):
        if b%4==0 and list_number[c]!='-' and list_number[c]!='+':
            a-=1
            list_rest_number[a]=list_number[c]
            b=1
        else:
            list_rest_number[a]=list_number[c]
        a-=1
        b+=1
    print(list_rest_number)
    print(''.join(list_rest_number).lstrip(','),end='')
    for d in range(real_number_index+1,len(list_number)):
        print(list_number[d],end='')

2024/05/17 16:50

박성우

JAVA입니다.

package 숫자에_콤마_삽입하기;

public class AddComma {

    public static void main(String[] args) {
        // TODO Auto-generated method stub
        System.out.println(addComma(20000000));
        System.out.println(addComma(-3245.24));
    }

    public static String addComma(int num) {
        boolean sign = (num >= 0); //양수 또는 0: true, 음수: false
        StringBuffer sb = new StringBuffer();
        sb.append(Integer.toString(Math.abs(num)));
        sb.reverse();

        for (int i = 0; i < sb.length(); i++) {
            if(i%4 == 3) {
                sb.insert(i, ',');
            }
        }

        sb.reverse();

        return ((sign) ? "" : "-") +  sb.toString();
    }

    public static String addComma(double num) {
        boolean sign = (num >= 0); //양수 또는 0: true, 음수: false
        String[] deci = new String[2]; //deci[0]: 정수부, deci[1]: 실수부
        String numStr = Double.toString(Math.abs(num));
        deci[0] = numStr.substring(0, numStr.lastIndexOf("."));
        deci[1] = numStr.substring(numStr.lastIndexOf("."));
        StringBuffer sb = new StringBuffer();
        sb.append(deci[0]);
        sb.reverse();

        for (int i = 0; i < sb.length(); i++) {
            if(i%4 == 3) {
                sb.insert(i, ',');
            }
        }

        sb.reverse();

        return ((sign) ? "" : "-") +  sb.toString() + deci[1];
    }
}

2025/01/20 22:54

박준우

목록으로