<div dir="ltr"><div dir="ltr"><div dir="ltr"><div dir="ltr"><div dir="ltr"><div dir="ltr"><div dir="ltr"><div dir="ltr"><div dir="ltr"><div dir="ltr"><div dir="ltr"><div>Hi,</div><div><br></div><div>I have a stock that has had a 6:1 share consolidation, so would reduce the quantity down to one for every 6 currently held.<br></div><div><br></div><div>I tried entering this as a "Split Shares" activity with a factor of 0.16667 but this causes a divide by zero floating point exception,  see below for the backtrace.  Its the same in 5.0.1 and 5.0.2.<br></div><div><br></div><div>The critical point is that the stock is defined with  a 1/1 fraction (ie: whole stocks) and that this causes the split factor in the activity to be rounded down to zero.</div><div><br></div><div>This rounding  is also an issue with normal splits of whole stocks, for example a 3:2 split entered as factor 1.5 as per the manual is rounded up to 2. <br></div><div><br></div><div>The problem code appears to be in in kmymoney/dialogs/investtransactioneditor.cpp where InvestTransactionEditor::createTransaction() calls:</div><div><br></div><div>s0.setShares(MyMoneyMoney(s0.shares().convertDenominator(securityFraction, roundingMethod)));</div><div><br></div><div>with securityFraction is 1 but the value in s0 is the factor, not the total quantity of shares, and needs to keep the precision it was entered with.<br></div><div><br></div><div>I think the rounding should be done later on the new balance of shares after the split factor is applied and not on the factor itself.<br></div><div><br></div><div>It does look like an issue to me but this is the first time I've delved into the code. <br></div><div><br></div><div>Thanks,<br></div><div>-Mark<br></div><div><br></div><div><br></div><div><br></div><div><br></div><div>          if (t->transaction().isStockSplit()) {    <br>            balance /= split.shares();                          <<< split.shares() is 0<br><br></div><div>#0  0x00007fffeb24e55a in __gmp_exception () at /usr/lib/x86_64-linux-gnu/libgmp.so.10<br></div><div>...<br></div><div>#3  0x00007ffff4b90448 in AlkValue::operator/=(AlkValue const&) () at /usr/lib/x86_64-linux-gnu/libalkimia5.so.7<br>#4  0x00005555556a4da0 in KGlobalLedgerViewPrivate::loadView() (this=0x555555d50ce0) at kmymoney-5.0.2/kmymoney/views/kgloballedgerview_p.h:793<br></div>#5  0x00005555556924b8 in KGlobalLedgerView::refresh() (this=0x5555561db540) at kmymoney-5.0.2/kmymoney/views/kgloballedgerview.cpp:152<br>#6  0x000055555569781f in KGlobalLedgerView::slotLeaveEditMode(KMyMoneyRegister::SelectedTransactions const&) (this=0x5555561db540, list=...) at kmymoney-5.0.2/kmymoney/views/kgloballedgerview.cpp:963<br>#7  0x00005555556b3bef in QtPrivate::FunctorCall<QtPrivate::IndexesList<0>, QtPrivate::List<KMyMoneyRegister::SelectedTransactions const&>, void, void (KGlobalLedgerView::*)(KMyMoneyRegister::SelectedTransactions const&)>::call(void (KGlobalLedgerView::*)(KMyMoneyRegister::SelectedTransactions const&), KGlobalLedgerView*, void**) (f=<br>    (void (KGlobalLedgerView::*)(KGlobalLedgerView * const, const KMyMoneyRegister::SelectedTransactions &)) 0x555555697566 <KGlobalLedgerView::slotLeaveEditMode(KMyMoneyRegister::SelectedTransactions const&)>, o=0x5555561db540, arg=0x7fffffffd0b0)<br>    at /usr/include/x86_64-linux-gnu/qt5/QtCore/qobjectdefs_impl.h:136<br>#8  0x00005555556b31c8 in QtPrivate::FunctionPointer<void (KGlobalLedgerView::*)(KMyMoneyRegister::SelectedTransactions const&)>::call<QtPrivate::List<KMyMoneyRegister::SelectedTransactions const&>, void>(void (KGlobalLedgerView::*)(KMyMoneyRegister::SelectedTransactions const&), KGlobalLedgerView*, void**) (f=<br>    (void (KGlobalLedgerView::*)(KGlobalLedgerView * const, const KMyMoneyRegister::SelectedTransactions &)) 0x555555697566 <KGlobalLedgerView::slotLeaveEditMode(KMyMoneyRegister::SelectedTransactions const&)>, o=0x5555561db540, arg=0x7fffffffd0b0)<br>    at /usr/include/x86_64-linux-gnu/qt5/QtCore/qobjectdefs_impl.h:169<br>#9  0x00005555556b1cac in QtPrivate::QSlotObject<void (KGlobalLedgerView::*)(KMyMoneyRegister::SelectedTransactions const&), QtPrivate::List<KMyMoneyRegister::SelectedTransactions const&>, void>::impl(int, QtPrivate::QSlotObjectBase*, QObject*, void**, bool*) (which=1, this_=0x555556b71be0, r=0x5555561db540, a=0x7fffffffd0b0, ret=0x0) at /usr/include/x86_64-linux-gnu/qt5/QtCore/qobject_impl.h:120<br>#10 0x00007ffff11096cf in QMetaObject::activate(QObject*, int, int, void**) () at /usr/lib/x86_64-linux-gnu/libQt5Core.so.5<br>#11 0x000055555582c2ac in TransactionEditor::finishEdit(KMyMoneyRegister::SelectedTransactions const&) (this=0x5555574ce6d0, _t1=...) at kmymoney-5.0.2/debug/kmymoney/dialogs/dialogs_autogen/EWIEGA46WW/moc_transactioneditor.cpp:338<br>#12 0x000055555581b707 in TransactionEditor::~TransactionEditor() (this=0x5555574ce6d0, __in_chrg=<optimised out>) at kmymoney-5.0.2/kmymoney/dialogs/transactioneditor.cpp:129<br>#13 0x000055555582e690 in InvestTransactionEditor::~InvestTransactionEditor() (this=0x5555574ce6d0, __in_chrg=<optimised out>) at kmymoney-5.0.2/kmymoney/dialogs/investtransactioneditor.cpp:317<br>#14 0x000055555582e6ac in InvestTransactionEditor::~InvestTransactionEditor() (this=0x5555574ce6d0, __in_chrg=<optimised out>) at kmymoney-5.0.2/kmymoney/dialogs/investtransactioneditor.cpp:319<br>#15 0x00005555556aa0e7 in KGlobalLedgerViewPrivate::deleteTransactionEditor() (this=0x555555d50ce0) at kmymoney-5.0.2/kmymoney/views/kgloballedgerview_p.h:1234<br>#16 0x000055555569b1fd in KGlobalLedgerView::slotEnterTransaction() (this=0x5555561db540) at kmymoney-5.0.2/kmymoney/views/kgloballedgerview.cpp:1551<br>#17 0x00005555556b3b39 in QtPrivate::FunctorCall<QtPrivate::IndexesList<>, QtPrivate::List<>, void, void (KGlobalLedgerView::*)()>::call(void (KGlobalLedgerView::*)(), KGlobalLedgerView*, void**) (f=(void (KGlobalLedgerView::*)(KGlobalLedgerView * const)) 0x55555569af98 <KGlobalLedgerView::slotEnterTransaction()>, o=0x5555561db540, arg=0x7fffffffd420) at /usr/include/x86_64-linux-gnu/qt5/QtCore/qobjectdefs_impl.h:136<br>#18 0x00005555556b3183 in QtPrivate::FunctionPointer<void (KGlobalLedgerView::*)()>::call<QtPrivate::List<>, void>(void (KGlobalLedgerView::*)(), KGlobalLedgerView*, void**) (f=(void (KGlobalLedgerView::*)(KGlobalLedgerView * const)) 0x55555569af98 <KGlobalLedgerView::slotEnterTransaction()>, o=0x5555561db540, arg=0x7fffffffd420) at /usr/include/x86_64-linux-gnu/qt5/QtCore/qobjectdefs_impl.h:169<br>#19 0x00005555556b1bc8 in QtPrivate::QSlotObject<void (KGlobalLedgerView::*)(), QtPrivate::List<>, void>::impl(int, QtPrivate::QSlotObjectBase*, QObject*, void**, bool*) (which=1, this_=0x5555561dc980, r=0x5555561db540, a=0x7fffffffd420, ret=0x0)<br>    at /usr/include/x86_64-linux-gnu/qt5/QtCore/qobject_impl.h:120<br>#20 0x00007ffff11096cf in QMetaObject::activate(QObject*, int, int, void**) () at /usr/lib/x86_64-linux-gnu/libQt5Core.so.5<br>#21 0x00007ffff3086122 in QAction::triggered(bool) () at /usr/lib/x86_64-linux-gnu/libQt5Widgets.so.5<br>#22 0x00007ffff308880c in QAction::activate(QAction::ActionEvent) () at /usr/lib/x86_64-linux-gnu/libQt5Widgets.so.5<br>#23 0x0000555555660a8d in QAction::trigger() (this=0x555555df8e10) at /usr/include/x86_64-linux-gnu/qt5/QtWidgets/qaction.h:184<br>#24 0x000055555566a868 in QtPrivate::FunctorCall<QtPrivate::IndexesList<>, QtPrivate::List<>, void, void (QAction::*)()>::call(void (QAction::*)(), QAction*, void**) (f=(void (QAction::*)(QAction * const)) 0x555555660a70 <QAction::trigger()>, o=0x555555df8e10, arg=0x7fffffffd660) at /usr/include/x86_64-linux-gnu/qt5/QtCore/qobjectdefs_impl.h:136<br>#25 0x000055555566a11d in QtPrivate::FunctionPointer<void (QAction::*)()>::call<QtPrivate::List<>, void>(void (QAction::*)(), QAction*, void**) (f=(void (QAction::*)(QAction * const)) 0x555555660a70 <QAction::trigger()>, o=0x555555df8e10, arg=0x7fffffffd660)<br>    at /usr/include/x86_64-linux-gnu/qt5/QtCore/qobjectdefs_impl.h:169<br>#26 0x00005555556694ee in QtPrivate::QSlotObject<void (QAction::*)(), QtPrivate::List<>, void>::impl(int, QtPrivate::QSlotObjectBase*, QObject*, void**, bool*) (which=1, this_=0x555557f268c0, r=0x555555df8e10, a=0x7fffffffd660, ret=0x0)<br>    at /usr/include/x86_64-linux-gnu/qt5/QtCore/qobject_impl.h:120<br>#27 0x00007ffff11096cf in QMetaObject::activate(QObject*, int, int, void**) () at /usr/lib/x86_64-linux-gnu/libQt5Core.so.5<br>#28 0x000055555582c669 in TransactionEditor::returnPressed(int) (this=0x5555574ce6d0, _t1=100) at kmymoney-5.0.2/debug/kmymoney/dialogs/dialogs_autogen/EWIEGA46WW/moc_transactioneditor.cpp:400<br>#29 0x000055555582ba3a in TransactionEditor::qt_static_metacall(QObject*, QMetaObject::Call, int, void**) (_o=0x5555574ce6d0, _c=QMetaObject::InvokeMetaMethod, _id=11, _a=0x555556b750d0)<br>    at kmymoney-5.0.2/debug/kmymoney/dialogs/dialogs_autogen/EWIEGA46WW/moc_transactioneditor.cpp:192<br>#30 0x00007ffff110a122 in QObject::event(QEvent*) () at /usr/lib/x86_64-linux-gnu/libQt5Core.so.5<br>#31 0x00007ffff308c82c in QApplicationPrivate::notify_helper(QObject*, QEvent*) () at /usr/lib/x86_64-linux-gnu/libQt5Widgets.so.5<br>#32 0x00007ffff30940f4 in QApplication::notify(QObject*, QEvent*) () at /usr/lib/x86_64-linux-gnu/libQt5Widgets.so.5<br>#33 0x00007ffff10da9a8 in QCoreApplication::notifyInternal2(QObject*, QEvent*) () at /usr/lib/x86_64-linux-gnu/libQt5Core.so.5<br>#34 0x00007ffff10dd11d in QCoreApplicationPrivate::sendPostedEvents(QObject*, int, QThreadData*) () at /usr/lib/x86_64-linux-gnu/libQt5Core.so.5<br>#35 0x00007ffff11342c3 in  () at /usr/lib/x86_64-linux-gnu/libQt5Core.so.5<br>#36 0x00007fffe6f40387 in g_main_context_dispatch () at /usr/lib/x86_64-linux-gnu/libglib-2.0.so.0<br>#37 0x00007fffe6f405c0 in  () at /usr/lib/x86_64-linux-gnu/libglib-2.0.so.0<br>#38 0x00007fffe6f4064c in g_main_context_iteration () at /usr/lib/x86_64-linux-gnu/libglib-2.0.so.0<br>#39 0x00007ffff11338ef in QEventDispatcherGlib::processEvents(QFlags<QEventLoop::ProcessEventsFlag>) () at /usr/lib/x86_64-linux-gnu/libQt5Core.so.5<br>#40 0x00007ffff10d89ea in QEventLoop::exec(QFlags<QEventLoop::ProcessEventsFlag>) () at /usr/lib/x86_64-linux-gnu/libQt5Core.so.5<br>#41 0x00007ffff10e1a84 in QCoreApplication::exec() () at /usr/lib/x86_64-linux-gnu/libQt5Core.so.5<br>#42 0x00005555555f3017 in runKMyMoney(QApplication&, std::unique_ptr<QSplashScreen, std::default_delete<QSplashScreen> >, QUrl const&, bool) (a=..., splash=std::unique_ptr<QSplashScreen> = {...}, file=..., noFile=false)<br>    at kmymoney-5.0.2/kmymoney/main.cpp:335<br>#43 0x00005555555f26f6 in main(int, char**) (argc=2, argv=0x7fffffffdf58) at kmymoney-5.0.2/kmymoney/main.cpp:243<br><br><br><div><br></div><div><br></div></div></div></div></div></div></div></div></div></div></div></div>