{"id":1456,"date":"2022-05-05T16:45:05","date_gmt":"2022-05-05T19:45:05","guid":{"rendered":"https:\/\/gladiston.net.br\/?page_id=1456"},"modified":"2023-08-07T17:55:53","modified_gmt":"2023-08-07T20:55:53","slug":"arredondamento-do-tipo-abnt","status":"publish","type":"page","link":"https:\/\/gladiston.net.br\/en\/banco-de-dados\/arredondamento-do-tipo-abnt\/","title":{"rendered":"Arredondamento do tipo ABNT em itens de servi\u00e7o NFs"},"content":{"rendered":"<p>Vez ou outra somos obrigados a usar a matem\u00e1tica de um jeito diferente, os matem\u00e1ticos e pesquisadores tratam arredondamentos de uma maneira cientifica enquanto o mundo civil pode trabalhar de uma maneira diferente, este \u00e9 o caso da norma ABNT para arredondamento de pre\u00e7os para itens de servi\u00e7o, elas funcionam do seguinte modo:<\/p>\n\n\n\n<p>1. Quando o algarismo a ser conservado for seguido de algarismo inferior a 5, o algarismo a ser conservado permanece sem altera\u00e7\u00e3o. Exemplo: 4,303 arredondado em duas casas decimais torna-se 4,30. Fala o teste:<\/p>\n\n\n\n<div class=\"wp-block-codemirror-blocks-code-block code-block\"><pre class=\"CodeMirror\" data-setting=\"{&quot;showPanel&quot;:true,&quot;languageLabel&quot;:false,&quot;fullScreenButton&quot;:true,&quot;copyButton&quot;:true,&quot;mode&quot;:&quot;pascal&quot;,&quot;mime&quot;:&quot;text\/x-pascal&quot;,&quot;theme&quot;:&quot;default&quot;,&quot;lineNumbers&quot;:true,&quot;styleActiveLine&quot;:true,&quot;lineWrapping&quot;:false,&quot;readOnly&quot;:true,&quot;fileName&quot;:&quot;&quot;,&quot;TrpContentRestriction&quot;:{&quot;restriction_type&quot;:&quot;exclude&quot;,&quot;selected_languages&quot;:[],&quot;panel_open&quot;:true},&quot;language&quot;:&quot;Pascal&quot;,&quot;maxHeight&quot;:&quot;400px&quot;,&quot;modeName&quot;:&quot;pascal&quot;}\">-- O arredondamento psql concorda com a regra ABNT retornando 4.3\nselect\n  cast(4.303 as numeric(18,2))\nfrom rdb$database<\/pre><\/div>\n\n\n\n<p>2. Quando o algarismo a ser conservado for seguido de algarismo superior a 5, ou igual a 5 seguindo de um algarismo diferente de zero, soma-se uma unidade ao algarismo a ser conservado. Exemplo: 15,4875 arredondado em duas casas decimais torna-se 15,49.<\/p>\n\n\n\n<div class=\"wp-block-codemirror-blocks-code-block code-block\"><pre class=\"CodeMirror\" data-setting=\"{&quot;showPanel&quot;:true,&quot;languageLabel&quot;:false,&quot;fullScreenButton&quot;:true,&quot;copyButton&quot;:true,&quot;mode&quot;:&quot;pascal&quot;,&quot;mime&quot;:&quot;text\/x-pascal&quot;,&quot;theme&quot;:&quot;default&quot;,&quot;lineNumbers&quot;:true,&quot;styleActiveLine&quot;:true,&quot;lineWrapping&quot;:false,&quot;readOnly&quot;:true,&quot;fileName&quot;:&quot;&quot;,&quot;TrpContentRestriction&quot;:{&quot;restriction_type&quot;:&quot;exclude&quot;,&quot;selected_languages&quot;:[],&quot;panel_open&quot;:true},&quot;language&quot;:&quot;Pascal&quot;,&quot;maxHeight&quot;:&quot;400px&quot;,&quot;modeName&quot;:&quot;pascal&quot;}\">-- o arredondamento psql concorda com a regra ABNT retornando 15.49\nselect\n  cast(15.4875 as numeric(18,2))\nfrom rdb$database<\/pre><\/div>\n\n\n\n<p>3. Quando o algarismo a ser conservado for \u00edmpar, seguido de 5 e posteriormente de zeros, soma-se uma unidade ao algarismo a ser conservado. Exemplo: 25,7750 arredondado em duas casas decimais fica 25,78.<\/p>\n\n\n\n<div class=\"wp-block-codemirror-blocks-code-block code-block\"><pre class=\"CodeMirror\" data-setting=\"{&quot;showPanel&quot;:true,&quot;languageLabel&quot;:false,&quot;fullScreenButton&quot;:true,&quot;copyButton&quot;:true,&quot;mode&quot;:&quot;pascal&quot;,&quot;mime&quot;:&quot;text\/x-pascal&quot;,&quot;theme&quot;:&quot;default&quot;,&quot;lineNumbers&quot;:true,&quot;styleActiveLine&quot;:true,&quot;lineWrapping&quot;:false,&quot;readOnly&quot;:true,&quot;fileName&quot;:&quot;&quot;,&quot;TrpContentRestriction&quot;:{&quot;restriction_type&quot;:&quot;exclude&quot;,&quot;selected_languages&quot;:[],&quot;panel_open&quot;:true},&quot;language&quot;:&quot;Pascal&quot;,&quot;maxHeight&quot;:&quot;400px&quot;,&quot;modeName&quot;:&quot;pascal&quot;}\">-- O arredondamento psql concorda com a regra ABNT retornando 25.78\nselect\n  cast(25.7750 as numeric(18,2))\nfrom rdb$database<\/pre><\/div>\n\n\n\n<p>4. Quando o algarismo a ser conservado for par, seguido de 5 e posteriormente de zeros, o algarismo a ser conservado permanece sem altera\u00e7\u00e3o. Exemplo: 31,7250 arredondado em duas casas decimais fica 31,72.<\/p>\n\n\n\n<div class=\"wp-block-codemirror-blocks-code-block code-block\"><pre class=\"CodeMirror\" data-setting=\"{&quot;showPanel&quot;:true,&quot;languageLabel&quot;:false,&quot;fullScreenButton&quot;:true,&quot;copyButton&quot;:true,&quot;mode&quot;:&quot;sql&quot;,&quot;mime&quot;:&quot;text\/x-sql&quot;,&quot;theme&quot;:&quot;default&quot;,&quot;lineNumbers&quot;:true,&quot;styleActiveLine&quot;:true,&quot;lineWrapping&quot;:false,&quot;readOnly&quot;:true,&quot;fileName&quot;:&quot;&quot;,&quot;TrpContentRestriction&quot;:{&quot;restriction_type&quot;:&quot;exclude&quot;,&quot;selected_languages&quot;:[],&quot;panel_open&quot;:true},&quot;language&quot;:&quot;SQL&quot;,&quot;maxHeight&quot;:&quot;400px&quot;,&quot;modeName&quot;:&quot;sql&quot;}\">-- No exemplo abaixo, o arredondamento psql FALHA COM A REGRA ABNT\n--   retornando 31,73 ao inv\u00e9s de 31.72 segundo a regra ABNT\nselect\n  cast(31.7250 as numeric(18,2))\nfrom rdb$database<\/pre><\/div>\n\n\n\n<p>Ent\u00e3o \u00e9 apenas no ponto &#8220;4&#8221; que o psql passa a falhar segundo esta norma. \u00c9 claro que arredondar desse jeito \u00e9 um pouco de preciosismo, mas ao rigor da lei e da norma ABNT para itens de presta\u00e7\u00e3o de servi\u00e7o em NFs \u00e9 preciso faz\u00ea-lo. Ent\u00e3o como ? A SQL Function abaixo aplica a regra ABNT que desejamos:<\/p>\n\n\n\n<div class=\"wp-block-codemirror-blocks-code-block code-block\"><pre class=\"CodeMirror\" data-setting=\"{&quot;showPanel&quot;:true,&quot;languageLabel&quot;:false,&quot;fullScreenButton&quot;:true,&quot;copyButton&quot;:true,&quot;mode&quot;:&quot;sql&quot;,&quot;mime&quot;:&quot;text\/x-sql&quot;,&quot;theme&quot;:&quot;default&quot;,&quot;lineNumbers&quot;:true,&quot;styleActiveLine&quot;:true,&quot;lineWrapping&quot;:false,&quot;readOnly&quot;:true,&quot;fileName&quot;:&quot;&quot;,&quot;TrpContentRestriction&quot;:{&quot;restriction_type&quot;:&quot;exclude&quot;,&quot;selected_languages&quot;:[],&quot;panel_open&quot;:true},&quot;language&quot;:&quot;SQL&quot;,&quot;maxHeight&quot;:&quot;400px&quot;,&quot;modeName&quot;:&quot;sql&quot;}\">create or alter function GET_ROUND_AS_ABNT (\n    P_VALOR double precision,\n    P_DECIMAIS smallint)\nreturns double precision\nas\ndeclare variable CDECIMAIS varchar(100);\ndeclare variable STR_VALOR varchar(100);\ndeclare variable NSUBSEQUENTE smallint;\ndeclare variable POS_DEC smallint;\n-- constante para indicar separador de decimal, \n--   mude para virgula se for o seu caso.\ndeclare variable C_CHAR_DEC varchar(1)='.';\nBEGIN\n STR_VALOR = CAST(P_VALOR AS VARCHAR(100));\n POS_DEC = POSITION(C_CHAR_DEC,STR_VALOR);\n cDecimais = SUBSTRING(STR_VALOR FROM POS_DEC+1 FOR CHAR_LENGTH(STR_VALOR));\n nSubsequente = P_DECIMAIS+1;\n IF (:P_DECIMAIS &lt; 1) THEN\n  RETURN TRUNC(P_VALOR);\n ELSE\n IF (CHAR_LENGTH(cDecimais) &lt;= :P_DECIMAIS) THEN\n  RETURN P_VALOR;\n ELSE\n  BEGIN\n   IF ((CAST(SUBSTRING(cDecimais FROM nSubsequente FOR 1) AS INTEGER) &gt; 5) OR\n       (CAST(SUBSTRING(cDecimais FROM nSubsequente FOR 1)AS DOUBLE PRECISION)  &lt; 5))  THEN\n    RETURN ROUND(P_VALOR,P_DECIMAIS);\n   ELSE\n   IF (CAST(SUBSTRING(cDecimais FROM nSubsequente FOR 1)AS DOUBLE PRECISION) = 5) THEN\n    IF (MOD(CAST(SUBSTRING(cDecimais FROM P_DECIMAIS FOR 1)AS DOUBLE PRECISION) ,2) &lt;&gt; 0) THEN\n     RETURN ROUND(P_VALOR,P_DECIMAIS);\n   ELSE\n   IF (CAST(SUBSTRING(cDecimais FROM nSubsequente+1 FOR 1)AS DOUBLE PRECISION) &gt; 0) THEN\n    RETURN ROUND(P_VALOR,P_DECIMAIS);\n   ELSE\n    RETURN TRUNC(P_VALOR,P_DECIMAIS);\n  END\nEND\n<\/pre><\/div>\n\n\n\n<p>Este c\u00f3digo n\u00e3o \u00e9 de minha autoria, quando iria criar uma SQL Function para resolver tal problema de arredondamento ABNT, fiz o que sempre fa\u00e7o, procuro na internet para saber se algu\u00e9m j\u00e1 n\u00e3o fez isso antes e encontrei as informa\u00e7\u00f5es necess\u00e1rias para este c\u00f3digo que modifiquei levemente. Exemplo de uso:<\/p>\n\n\n\n<div class=\"wp-block-codemirror-blocks-code-block code-block\"><pre class=\"CodeMirror\" data-setting=\"{&quot;showPanel&quot;:true,&quot;languageLabel&quot;:false,&quot;fullScreenButton&quot;:true,&quot;copyButton&quot;:true,&quot;mode&quot;:&quot;sql&quot;,&quot;mime&quot;:&quot;text\/x-sql&quot;,&quot;theme&quot;:&quot;default&quot;,&quot;lineNumbers&quot;:true,&quot;styleActiveLine&quot;:true,&quot;lineWrapping&quot;:false,&quot;readOnly&quot;:true,&quot;fileName&quot;:&quot;&quot;,&quot;TrpContentRestriction&quot;:{&quot;restriction_type&quot;:&quot;exclude&quot;,&quot;selected_languages&quot;:[],&quot;panel_open&quot;:true},&quot;language&quot;:&quot;SQL&quot;,&quot;maxHeight&quot;:&quot;400px&quot;,&quot;modeName&quot;:&quot;sql&quot;}\">select\n  GET_ROUND_AS_ABNT(31.7250, 2)\nfrom rdb$database<\/pre><\/div>\n\n\n\n<h2 class=\"wp-block-heading\">Conclusion<\/h2>\n\n\n\n<p>Lembre-se de que este \u00e9 um tipo de arredondamento especial, s\u00f3 \u00e9 usado nas situa\u00e7\u00f5es de arredondamento de itens de servi\u00e7o em NF-s, portanto descarte o uso dessa fun\u00e7\u00e3o para outras opera\u00e7\u00f5es.<\/p>\n\n\n\n<p>O material de referencia desse artigo foi obtido em:<\/p>\n\n\n\n<p><a href=\"https:\/\/documentacao.senior.com.br\/goup\/5.10.1\/regra_funcoes\/arredonda-abnt.htm#:~:text=A%20regra%20de%20arredondamento%20da%20ABNT%20prev%C3%AA%20os%20seguintes%20arredondamentos,torna%2Dse%204%2C30.\">https:\/\/documentacao.senior.com.br\/goup\/5.10.1\/regra_funcoes\/arredonda-abnt.htm#:~:text=A%20regra%20de%20arredondamento%20da%20ABNT%20prev%C3%AA%20os%20seguintes%20arredondamentos,torna%2Dse%204%2C30.<\/a><\/p>","protected":false},"excerpt":{"rendered":"<p>Vez ou outra somos obrigados a usar a matem\u00e1tica de um jeito diferente, os matem\u00e1ticos e pesquisadores tratam arredondamentos de uma maneira cientifica enquanto o mundo civil pode trabalhar de uma maneira diferente, este \u00e9 o caso da norma ABNT para arredondamento de pre\u00e7os para itens de servi\u00e7o, elas funcionam do seguinte modo: 1. Quando [&hellip;]<\/p>\n","protected":false},"author":4,"featured_media":0,"parent":1109,"menu_order":0,"comment_status":"closed","ping_status":"closed","template":"templates\/template-full-width.php","meta":{"footnotes":""},"class_list":["post-1456","page","type-page","status-publish","hentry"],"aioseo_notices":[],"_links":{"self":[{"href":"https:\/\/gladiston.net.br\/en\/wp-json\/wp\/v2\/pages\/1456","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/gladiston.net.br\/en\/wp-json\/wp\/v2\/pages"}],"about":[{"href":"https:\/\/gladiston.net.br\/en\/wp-json\/wp\/v2\/types\/page"}],"author":[{"embeddable":true,"href":"https:\/\/gladiston.net.br\/en\/wp-json\/wp\/v2\/users\/4"}],"replies":[{"embeddable":true,"href":"https:\/\/gladiston.net.br\/en\/wp-json\/wp\/v2\/comments?post=1456"}],"version-history":[{"count":13,"href":"https:\/\/gladiston.net.br\/en\/wp-json\/wp\/v2\/pages\/1456\/revisions"}],"predecessor-version":[{"id":2341,"href":"https:\/\/gladiston.net.br\/en\/wp-json\/wp\/v2\/pages\/1456\/revisions\/2341"}],"up":[{"embeddable":true,"href":"https:\/\/gladiston.net.br\/en\/wp-json\/wp\/v2\/pages\/1109"}],"wp:attachment":[{"href":"https:\/\/gladiston.net.br\/en\/wp-json\/wp\/v2\/media?parent=1456"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}