From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Message-ID: <454CBC60.7050701@iop.kiev.ua> Date: Sat, 04 Nov 2006 18:14:24 +0200 From: Andrey Rybak User-Agent: Mozilla/5.0 (X11; U; Linux i686; en-US; rv:1.8.0.7) Gecko/20061020 SeaMonkey/1.0.5 MIME-Version: 1.0 To: community@altlinux.ru Content-Type: text/plain; charset=KOI8-R Content-Transfer-Encoding: 8bit X-Milter: Spamilter (Reciever: rmaile.iop.kiev.ua; Sender-ip: 10.10.0.195; Sender-helo: [10.10.0.195]; ) X-Virus-Scanned: ClamAV 0.88.5/2161/Sat Nov 4 07:51:12 2006 on rmaile.iop.kiev.ua X-Virus-Status: Clean X-Spam-Status: No, score=-3.4 required=4.2 tests=ALL_TRUSTED,BAYES_00, CHARSET_FARAWAY,MIME_CHARSET_FARAWAY autolearn=ham version=3.1.7 X-Spam-Checker-Version: SpamAssassin 3.1.7 (2006-10-05) on rmaile.iop.kiev.ua Subject: [Comm] c language question X-BeenThere: community@lists.altlinux.org X-Mailman-Version: 2.1.9rc1 Precedence: list Reply-To: ALT Linux Community List-Id: ALT Linux Community List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Sat, 04 Nov 2006 16:10:12 -0000 Archived-At: List-Archive: List-Post: Привет, коммунити! Извините за оффтоп. Стоит задача (стандартная должно быть) преобразовывать строки вида "0.ab" в целое число ab. Вероятно, я плохо понимаю Си , но самый прямой метод будет выглядеть так: 1 #include 2 #include 3 int main(){ 4 const char* a = "0.16"; 5 printf("%d",(int)(100*atof(a))); 6 return 0; 7 } Но вся беда в том, что это не всегда работает. Например atof запросто может вернуть 0.159999... в приведенном примере, а приведение типа (int) просто отбрасывает дробную часть и результат налицо: "0.16" преобразуется в целое 15. Проблема наверняка стара как сам Си. Кто знает, как классики решают подобные задачи?