숫자 형태의 문자열을 콤마가 포함된 금액 표기식 문자열로 바꾸어주는 프로그램을 작성하시오.
※ 단, 프로그래밍 언어에서 지원하는 금액변환 라이브러리는 사용하지 말것
예)
| 숫자 | 금액 |
|---|---|
| 1000 | 1,000 |
| 20000000 | 20,000,000 |
| -3245.24 | -3,245.24 |
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('.'):]
정규식 써도 되나요?ㅎㅎ
function fnFormatComma(num) {
num = num + '';
while( /(^[+-]?\d+)(\d{3})/.test(num) ) {
num = num.replace(/(^[+-]?\d+)(\d{3})/, '$1'+','+'$2');
}
return num;
}
예전에 정규식 학습하면서 풀었던 퀴즈 문제의 답을 여기서 쓰네요^^
14개풀고 진행 못해서 잠시 접어둔 상태인데~ 혹시 정규식 공부하실분을 위해서 링크 남깁니다.
정규식퀴즈사이트:http://regex101.com/quiz/
import re
def commaParse(num):
return re.sub('(?<=\d)(?=(\d{3})+(?!\d))',',',str(num))
print (commaParse(-3245.24))
펄입니다
$_=@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
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;
}
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;
}
}
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);//콤마를 추가한 숫자를 출력
}
}
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))
발로 짠 Clojure 코드입니다. 이렇게 짜면 안된다는 걸 보여드리기 위해... 쿨럭.
#(apply str (flatten (interpose \, (filter (complement empty?) (cons (take (rem (count %) 3) %) (partition 3 (drop (rem (count %) 3) %)))))))
Ruby.
def comma(amount)
integer, decimal = amount.to_s.split(".")
puts [integer.reverse.scan(/.{1,3}/).join(",").reverse, decimal].compact.join(".")
end
파이썬으로 작성해봤습니다. 조악하네요..ㅠㅠ
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
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
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);
}
}
파이썬 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)
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;
}
정규식 쓰라고 낸 문제 같아서...
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로 앞에 숫자가 있어야 이후 매칭함
"""
소수점 이하에 , 안붙이도록 하려다보니 sub 두개 썻네요 =ㅅ=
def fommated_number(str)
str.sub(/\d+/) { |m| m.gsub(/(?=(\d{3})+$)/, ",") }
end
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
$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);
소수점 처리 조언좀 부탁드릴게요...
이렇게 짜면 안된다는것을 보여드리려고 짰어요(핑계)..
하하,,,,,, 저좀 무식하네요.
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);
}
}
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;
}
//숫자를 받음
$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);
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
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))
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")
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
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;
}
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
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번째마다 점을 찍었습니다.
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"
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)
짧게도 만들어봤습니다.
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
재귀호출입니다.
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')
파이썬 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])
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);
}
}
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 함수를 이용해서 해보려고 했는데 잘 안되서 문자열로 치환해서 출력했습니다. 혹시 힌트라도 좀 주세요!!!
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]
파이썬 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으로 나눠서 ,를 찍는 방식이며
소수의 경우 '.'을 찾아서 그 이후 숫자를 추가하는 방법으로 풀었습니다.
많이 부족합니다. 감사합니다.
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자리까지 구현.
#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>
#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;
}
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 )
_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 ####
걍되는대로 풀어버렸다.
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;
}
}
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;
}
#-*- 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))
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);
}
}
}
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])
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());
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)
[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"))
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])
파이썬 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
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)
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();
}
}
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)
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)
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)
어렵네요 ㅠ
#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]);
}
}
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
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));
}
}
}
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)
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();
}
} 주어진 수를 거꾸로 놓고 보면 편할거같아서 이렇게 짰습니다.
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)
파이썬 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
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(",");
}
}
}
}
}
}
완전 무식하게 풀었네요.
파이썬 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())
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"));
}
}
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)
```
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()))
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:]
#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;
}
#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;
}
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
Money,x = list(input("돈을 입력하세요")),3
Money.reverse()
while len(Money) > x:
Money.insert(x,',')
x += 4
Money.reverse()
print("".join(Money))
/* 숫자에 콤마 삽입하기 */
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
}
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
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)
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로 합쳤습니다.
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입니다
정규식으로 푸신분들 보니까 자괴감드네요...
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(".")) : "");
}
}
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"))
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()
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)))
파이썬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)
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;
}
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);
}
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)
#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));
}
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);
}
}
}
}
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)
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)
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'))
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);
}
}
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
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));
}
}
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
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))
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))
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)
#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;
}
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)
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))
#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;
}
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;
}
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)
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
정규표현식 쓰려다가 머리가 쪼개질거같아서 그냥 길게 썼습니당 ㅠㅠㅠ
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);
}
}
허접은 노가다로 풉니다 ㅠ 다른분들 정말 대단하십니다. ㅠㅠ 그래도 나름 공부 많이 됬습니다...
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)
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}")형식
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))
다른 분들은 다하는 정규표현식, 재귀함수 이런거 생각도 못하고 의식의 흐름대로 작성한 내용 올려봅니다^^ 다른분들거 보니 생각을 전화해야할 곳이 한두곳이 아니네요
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)
#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");
}
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)
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')
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쓴당. 마이너스는 일단 보류
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)
왠만하면... 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];
}
}
}
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입니다
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:])
그냥 간단히 자연수일때만 가정하고 짜봤습니다
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)
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))
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);
}
}
// 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);
}
}
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)
자바로 풀어봤습니다.
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);
}
}
자바로 작성하였습니다. 노가다코딩으로 만들어서 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);
}
}
}
}
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='')
# 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='')
파이썬입니다. 아직 포문이랑 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))
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)
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)
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)
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))
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='')
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];
}
}