Return to num2str.c CVS log | Up to [ELWIX - Embedded LightWeight unIX -] / embedaddon / php / ext / bcmath / libbcmath / src |
1.1 misho 1: /* num2str.c: bcmath library file. */ 2: /* 3: Copyright (C) 1991, 1992, 1993, 1994, 1997 Free Software Foundation, Inc. 4: Copyright (C) 2000 Philip A. Nelson 5: 6: This library is free software; you can redistribute it and/or 7: modify it under the terms of the GNU Lesser General Public 8: License as published by the Free Software Foundation; either 9: version 2 of the License, or (at your option) any later version. 10: 11: This library is distributed in the hope that it will be useful, 12: but WITHOUT ANY WARRANTY; without even the implied warranty of 13: MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU 14: Lesser General Public License for more details. (COPYING.LIB) 15: 16: You should have received a copy of the GNU Lesser General Public 17: License along with this library; if not, write to: 18: 19: The Free Software Foundation, Inc. 20: 59 Temple Place, Suite 330 21: Boston, MA 02111-1307 USA. 22: 23: You may contact the author by: 24: e-mail: philnelson@acm.org 25: us-mail: Philip A. Nelson 26: Computer Science Department, 9062 27: Western Washington University 28: Bellingham, WA 98226-9062 29: 30: *************************************************************************/ 31: 32: #include <config.h> 33: #include <stdio.h> 34: #include <assert.h> 35: #include <stdlib.h> 36: #include <ctype.h> 37: #include <stdarg.h> 38: #include "bcmath.h" 39: #include "private.h" 40: 41: /* Convert a numbers to a string. Base 10 only.*/ 42: 43: char 44: *bc_num2str (num) 45: bc_num num; 46: { 47: char *str, *sptr; 48: char *nptr; 49: int index, signch; 50: 51: /* Allocate the string memory. */ 52: signch = ( num->n_sign == PLUS ? 0 : 1 ); /* Number of sign chars. */ 53: if (num->n_scale > 0) 54: str = (char *) safe_emalloc (1, num->n_len + num->n_scale, 2 + signch); 55: else 56: str = (char *) safe_emalloc (1, num->n_len, 1 + signch); 57: if (str == NULL) bc_out_of_memory(); 58: 59: /* The negative sign if needed. */ 60: sptr = str; 61: if (signch) *sptr++ = '-'; 62: 63: /* Load the whole number. */ 64: nptr = num->n_value; 65: for (index=num->n_len; index>0; index--) 66: *sptr++ = BCD_CHAR(*nptr++); 67: 68: /* Now the fraction. */ 69: if (num->n_scale > 0) 70: { 71: *sptr++ = '.'; 72: for (index=0; index<num->n_scale; index++) 73: *sptr++ = BCD_CHAR(*nptr++); 74: } 75: 76: /* Terminate the string and return it! */ 77: *sptr = '\0'; 78: return (str); 79: }