2014-02-11 7 views
0

ENG/US 통화로이 작업을 수행하는 스크립트가 여러 개 있지만 포르투갈어로되어 있기 때문에 찾기가 어려워요.단어로 통화 필드를 변환하는 JavaScript 함수

내 필요에 맞게 스크립트를 수정하려했지만 힘들었습니다.

그래서이 스크립트는 웹에서 발견되었지만 작동하지 않습니다. 뭐가 잘못 되었 니? Uncaught SyntaxError: Unexpected identifier : lin23

<script> 
function number_format(a, b, c, d) { 
    a = Math.round(a * Math.pow(10, b))/Math.pow(10, b); 
    e = a + ''; 
    f = e.split('.'); 
    if (!f[0]) { 
     f[0] = '0'; 
    } 
    if (!f[1]) { 
     f[1] = ''; 
    } 
    if (f[1].length < b) { 
     g = f[1]; 
     for (i=f[1].length + 1; i <= b; i++) { 
      g += '0'; 
     } 
     f[1] = g; 
    } 
    if(d != '' && f[0].length > 3) { 
     h = f[0]; 
     f[0] = ''; 
     for(j = 3; j < h.length; j+=3) { 
      i = h.slice(h.length – j, h.length – j + 3); 
      f[0] = d + i + f[0] + ''; 
     } 
     j = h.substr(0, (h.length % 3 == 0) ? 3 : (h.length % 3)); 
     f[0] = j + f[0]; 
    } 
    c = (b <= 0) ? '' : c; 
    return f[0] + c + f[1]; 
} 

function ValorPorExtenso(valor) { 

if (!valor) return 'Zero'; 

var singular = ["centavo", "real", "mil", "milhão", "bilhão", "trilhão", "quatrilhão"]; 
var plural = ["centavos", "reais", "mil", "milhões", "bilhões", "trilhões", "quatrilhões"]; 

var c = ["", "cento", "duzentos", "trezentos", "quatrocentos", "quinhentos", "seiscentos", "setecentos", "oitocentos", "novecentos"]; 
var d = ["", "dez", "vinte", "trinta", "quarenta", "cinquenta", "sessenta", "setenta", "oitenta", "noventa"]; 
var d10 = ["dez", "onze", "doze", "treze", "quatorze", "quinze", "dezesseis", "dezesete", "dezoito", "dezenove"]; 
var u = ["", "um", "dois", "três", "quatro", "cinco", "seis", "sete", "oito", "nove"]; 

var z = 0; 

valor = valor.toString(); 
valor = number_format(valor, 2, '.', '.'); 
alert(valor); 
var inteiro = valor.split(/\./); 

for (var i = 0; i < inteiro.length; i++) { 
inteiro[i] = inteiro[i].toString(); 
for (var ii = inteiro[i].length; ii < 3; ii++) { 
inteiro[i] = '0' + inteiro[i]; 
} 
} 

var fim = inteiro.length – (inteiro[inteiro.length-1] > 0 ? 1 : 2); 

var rc, rd, ru; 
var r, t; 
var rt = ''; 
var valor_split; 
for (var i = 0; i < inteiro.length; i++) { 

valor = inteiro[i]; 
valor_split = valor.match(/./g); 

rc = ((valor > 100) && (valor < 200)) ? 'cento' : c[valor_split[0]]; 
rd = (valor_split[1] < 2) ? '' : d[valor_split[1]]; 
ru = (valor > 0) ? ((valor_split[1] == 1) ? d10[valor_split[2]] : u[valor_split[2]]) : ''; 

r = rc + ((rc && (rd || ru)) ? ' e ' : '') + rd + ((rd && ru) ? ' e ' : '') + ru; 
t = inteiro.length – 1 – i; 

r = r + (r ? ' ' + (valor > 1 ? plural[t] : singular[t]) : ''); 
if (valor == '000') z++; 
else if (z > 0) z–; 

if ((t==1) && (z>0) && (inteiro[0] > 0)) { 
r = r + ((z>1) ? ' de ' : '') + plural[t]; 
} 
if (r) { 
rt = rt + (((i > 0) && (i <= fim) && (inteiro[0] > 0) && (z < 1)) ? ((i < fim) ? ', ' : ' e ') : ' ') + r; 
} 

} 

return (rt ? rt : 'zero'); 

} 

alert(ValorPorExtenso(8916165)); 
</script> 
+1

어떤 줄이 23입니까? – ppoliani

+0

'i = h.slice (h.length - j, h.length - j + 3); ' – user1148875

+3

당신은 minifier의 작업을 직접하고 있습니까? 코드를 읽을 수있게 만들고 minifier에게 minifier의 것을 남겨 둡니다. – techfoobar

답변

0

나는이며, 별도의 파일에 붙여 넣기로 코드를 복사 한 것으로 알고 있습니다. 일부 문자의 인코딩에 문제가 있습니다. 예를 들어 '-'는 잘못 인코딩됩니다. 그래서 그냥 그들을

i = h.slice(h.length – j, h.length – j + 3) 

난 당신이 그 차이를 볼 수 없습니다 알고 있지만, 두 문자가 다른

i = h.slice(h.length - j, h.length – j + 3) 

해야 대체합니다.

변경된 코드를 살펴보십시오. http://jsfiddle.net/7P3Vy/

+0

아, 너는 이제 너를 보았다. – user1148875

+0

나는 그 문자 '-'가 마이너스 부호와 같지 않다는 것을 의미한다. 나는 너를 위해 그들을 바꿨다. – ppoliani

+0

이 모든 해결 :) 건배 – user1148875

관련 문제