I actually store shares and votes per share. Most corporations have outstanding shares that are often big integers and votes per share that are small integers (typically 1 but you may encounter other values like 1.5, 5 or 10). Nevertheless, there are some jurisdictions around the world that fix an upper limit to the number of issued shares. If that limit is, for example, 100, then fractions of shares are traded and this is why I need a lot of significant digits at the left AND at the right of the decimal point.
If I want to calculate the percentage of vote of any given holder, I have to perform the scalar product of outstanding shares and votes per shares. For example, Holder X may hold 100,000,000 common shares of corporation ABC at 1 vote per share and 0.123456789 preferred shares at 10 votes per share, which gives 100,000,000 * 1 + 0.123456789 * 10 = 100,000,001,23456789 votes. Dividing this number by the total number of votes of corporation ABC (assume the value is 123,456,789 ) gives the percentage of votes of Holder X in corporation ABC (81.00000173709993%).
We obviously do not need such precision if all we intend is to display the holders of corporation ABC. 81% is as good as 81.00000173709993%. However, if corporation ABC holds 41.2345678% of corporation DEF and corporation DEF holds 25% of corporation GHI, then holder X indirectly holds 81.00000173709993% * 41.2345678% * 25% of corporation GHI.
I hope you get my drift. I use recursive CTE to calculate these indirect percentages. If numbers are truncated at every step of the process, we may end up having, for example, some holder indirectly hold 49,999720% of a given corporation where the truth is 50%. Here, a minority holder becomes a majority holder and that makes all the difference in the world.
You may call this ether, I call it daily business.