Canola  0.8.D001
lib/number/to_string.cc
Go to the documentation of this file.
00001 //
00002 // canola - canon canola 1614p emulator
00003 // Copyright (C) 2011, 2012 Peter Miller
00004 //
00005 // This program is free software; you can redistribute it and/or modify
00006 // it under the terms of the GNU General Public License, version 3, as
00007 // published by the Free Software Foundation.
00008 //
00009 // This program is distributed in the hope that it will be useful,
00010 // but WITHOUT ANY WARRANTY; without even the implied warranty of
00011 // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
00012 // General Public License for more details.
00013 //
00014 // You should have received a copy of the GNU General Public License along
00015 // with this program. If not, see <http://www.gnu.org/licenses/>.
00016 //
00017 
00018 #include <lib/number.h>
00019 
00020 
00021 std::string
00022 number::to_string(void)
00023     const
00024 {
00025     std::string result;
00026     if (has_overflowed())
00027         result += '!';
00028     bool zero_sup = !has_overflowed();
00029     for (int dignum = 15; dignum >= 0; --dignum)
00030     {
00031         int n = value.get(dignum);
00032         if ((unsigned)dignum <= decimal)
00033             zero_sup = false;
00034         if (n != 0)
00035             zero_sup = false;
00036         if (n != 0 || !zero_sup)
00037             result += (char)('0' + n);
00038         else
00039             result += ' ';
00040         if ((unsigned)dignum == decimal)
00041             result += '.';
00042     }
00043     if (negative)
00044         result += '-';
00045     return result;
00046 }
00047 
00048 
00049 // vim: set ts=8 sw=4 et :