void BitFieldWidget::updateBits(const HNumber& number) { QString binaryNumberString = HMath::format(number, 'b'); QListIterator<BitWidget*> bitsIterator(m_bitWidgets); if (number.isZero() || !number.isInteger()) binaryNumberString.clear(); else if (number.isNegative()) binaryNumberString.remove(0, 3); // Remove '-0b'. else binaryNumberString.remove(0, 2); // Remove '0b'. QString::ConstIterator iterator = binaryNumberString.end(); while (bitsIterator.hasNext()) { if (iterator != binaryNumberString.begin()) { --iterator; bitsIterator.next()->setState(*iterator == '1'); } else bitsIterator.next()->setState(false); } }
HNumber function_round(Function* f, const Function::ArgumentList& args) { ENSURE_EITHER_ARGUMENT_COUNT(1, 2); HNumber num = args.at(0); if (args.count() == 2) { HNumber argPrecision = args.at(1); if (argPrecision != 0) { if (!argPrecision.isInteger()) { f->setError(OutOfDomain); return HMath::nan(); } int prec = argPrecision.toInt(); if (prec) return HMath::round(num, prec); // The second parameter exceeds the integer limits. if (argPrecision < 0) return HNumber(0); return num; } } return HMath::round(num); }
HNumber Functions::Private::round( Function * f, const QVector<HNumber> & args ) { int nArgs = args.count(); if ( nArgs != 1 && nArgs != 2 ) { f->setError( f->name(), Functions::tr( "function requires 1 or 2 arguments" ) ); return HNumber::nan(); } HNumber num = args[0]; if( nArgs == 2){ int prec = 0; HNumber argprec = args[1]; if (argprec != 0) { if( !argprec.isInteger() ) { f->setError( f->name(), Functions::tr( "function undefined for specified arguments" ) ); return HNumber::nan(); } if ((prec = argprec.toInt()) != 0) return HMath::round( num, prec ); // the 2. parameter exceeds the integer limits if (argprec < 0) return HNumber(0); return num; } } return HMath::round( num ); }