?? fractiondata.cpp
字號:
/******************************************************************************** Copyright (C) 2000-2006 TROLLTECH ASA. All rights reserved.**** This file is part of the Phone Edition of the Qtopia Toolkit.**** Licensees holding a valid license agreement from Trolltech or any of its** authorized distributors may use this file in accordance with** the License Agreement provided with the Licensed Software.**** See http://www.trolltech.com/pricing.html or email sales@trolltech.com for** information about Trolltech's Commercial License Agreements.**** Contact info@trolltech.com if any conditions of this licensing are** not clear to you.********** This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE** WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.******************************************************************************/#ifdef ENABLE_FRACTION#include <qstring.h>#include "fractiondata.h"#include "engine.h"// Data type functionsbool FractionData::push(char c, bool commit) { if (formattedOutput.length() > 15) return false; if ( numerator == 0 && c == '0' ) return !edited; if (edited && numerator == 0) edited = false; if (!edited) { numerator = 0; nString.truncate(0); dString.truncate(0); if (commit) edited = true; dEdited = false; } if (c == '/') { if (dEdited) return false; if (commit) { if (numerator == 0){ numerator = 1; nString.setNum(1); } denominator = 0; dEdited = true; edited = true; dString.truncate(0); buildFormattedString(); } return true; } // append char and test result bool ok = false; QString tmpString; qlonglong num; if (dEdited) { tmpString = dString; tmpString.append(QChar(c)); num = tmpString.toLongLong(&ok); if (ok && commit) { dString = tmpString; denominator = num; } } else { tmpString = nString; tmpString.append(QChar(c)); num = tmpString.toLongLong(&ok); if (ok && commit) { nString = tmpString; numerator = num; edited = true; } } if (ok && commit) buildFormattedString(); return ok;}// puts dString and nString togethervoid FractionData::buildFormattedString() { formattedOutput.truncate(0); if (denominator < 0) { numerator = 0 - numerator; nString.truncate(0); nString.setNum(numerator); denominator = 0 - denominator; dString.truncate(0); dString.setNum(denominator); buildFormattedString(); return; } formattedOutput.append(nString); if (dEdited && denominator != 1) { formattedOutput.append(QChar('/')); if (denominator) formattedOutput.append(dString); } if (!formattedOutput.length()) formattedOutput.append(QChar('0'));}bool FractionData::del() { if (!edited) return true; if (dEdited) { if (dString.length()) { dString.truncate(dString.length()-1); bool ok = true; denominator=dString.toLongLong(&ok); if (!ok) { denominator = 1; dEdited = false; } } else { dEdited = false; } } else { if (formattedOutput.length() == 1 || (formattedOutput.length() == 2) && formattedOutput[0] == '-') { nString.truncate(0); nString.append("0"); edited = false; numerator = 0; return true; } else nString.truncate(nString.length()-1); numerator = numerator / 10; } buildFormattedString(); return false;}void FractionData::clear() { edited = false; dEdited = false; nString.truncate(0); dString.truncate(0); formattedOutput.truncate(0); formattedOutput.append("0"); numerator = 0; denominator = 1; buildFormattedString();}void FractionData::set(qlonglong n,qlonglong d) { clear(); if (!d) d = 1; qlonglong GCM = findGCM(n,d); numerator = n / GCM; denominator = d / GCM; if (d == 1) dEdited = false; else dEdited = true; nString.setNum(numerator); dString.setNum(denominator); buildFormattedString();}// find greatest common dqlonglong FractionData::doFindGCM ( qlonglong a, qlonglong b ) { qlonglong remainder = b % a; if ( remainder ) return doFindGCM( remainder,a); return a;}// wrapper that makes sure that a and b// are the right way roundqlonglong FractionData::findGCM ( qlonglong a, qlonglong b ) { if ( a == b ) return a; if ( a > b ) return doFindGCM ( a, b ); else return doFindGCM ( b, a );}#endif //ENABLE_FRACTION
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -