Jump to page: 1 2 3
Thread overview
How to make a Currency class from std.BigInt?
Jan 30, 2015
RuZzz
Jan 30, 2015
RuZzz
Jan 30, 2015
Ivan Kazmenko
Jan 31, 2015
RuZzz
Jan 31, 2015
RuZzz
Jan 31, 2015
Colin
Jan 31, 2015
RuZzz
Jan 31, 2015
RuZzz
Jan 31, 2015
Ivan Kazmenko
Jan 31, 2015
RuZzz
Jan 31, 2015
Colin
Jan 31, 2015
RuZzz
Jan 31, 2015
RuZzz
Jan 31, 2015
zeljkog
Jan 31, 2015
zeljkog
Jan 31, 2015
RuZzz
Jan 31, 2015
RuZzz
Feb 11, 2015
RuZzz
Feb 11, 2015
RuZzz
Feb 14, 2015
RuZzz
Feb 15, 2015
Jay Norwood
January 30, 2015
module axfinance.api.currencies;

import std.array, std.stdio, std.system, std.bigint, std.conv;


class Currencies
{
	public:
		this(ulong pf)
		{
			exponent(pf);
		}
		bool integer(BigInt pb)
		{
			zInt = pb;
			return true;
		}
		string value()
		{
			string res = to!string(zInt);
			insertInPlace(res, res.length - zExp,".");
			return res;
		}
	private:
		bool exponent(ulong pe)
		{
			zExp = pe;
			return true;
		}
		BigInt zInt;
		ulong zExp;
}

unittest
{
	double d1 = 45.67;
	immutable LIM_FIAT = 2, LIM_EXCH = 6, LIM_CRYP = 8;
	auto c = [	"BTC":["N-01":new Currencies(LIM_CRYP), "N-02":new Currencies(LIM_CRYP), "SUM1":new Currencies(LIM_CRYP)],
			"CNY":["N-01":new Currencies(LIM_FIAT), "N-02":new Currencies(LIM_EXCH), "N-03":new Currencies(LIM_CRYP), "SUM1":new Currencies(LIM_CRYP), "SUM2":new Currencies(LIM_CRYP)]];
//	 EUR, LTC, RUB;

	c["BTC"]["N-01"] = 1.00000002;//Error: cannot implicitly convert expression (1) of type double to axfinance.api.currencies.Currencies
	c["BTC"]["N-02"] = 15.00000002+"13455565.45665435";
	c["BTC"]["SUM1"] = c["BTC"]["N-01"] + c["BTC"]["N-02"];
	assert(c["BTC"]["SUM1"] == "13455581.45665437");
	c["CNY"]["N-01"] = 1.02;
	c["CNY"]["N-02"] = "0.01";
	c["CNY"]["N-03"] = "0.00000001";
	c["CNY"]["SUM1"] = c["CNY"]["N-01"] + c["CNY"]["N-02"];
	assert(c["CNY"]["SUM1"] == "1.03");
	assert(to!double(c["CNY"]["SUM1"]) == 1.03);
	c["CNY"]["SUM2"] = c["CNY"]["N-01"] + c["CNY"]["N-03"];
	assert(c["CNY"]["SUM2"] == "1.02000001");
}
January 30, 2015
What do I need to learn?
January 30, 2015
On Friday, 30 January 2015 at 20:34:53 UTC, RuZzz wrote:
> What do I need to learn?

> c["BTC"]["N-01"] = 1.00000002;//Error: cannot implicitly convert
expression (1) of type double to axfinance.api.currencies.Currencies

As I see it, there is no constructor in your class with a double argument.
So you cannot assign a double (1.00000002)
to a Currencies struct (c["BTC"]["N-01"]).
January 31, 2015
How to get amount of digit after point in a double for to get integer from a double?
    assert(amountAfterPoint(1.456) == 3);
    assert(amountAfterPoint(0.00006) == 5);
January 31, 2015
without to!string
January 31, 2015
On Saturday, 31 January 2015 at 12:07:23 UTC, RuZzz wrote:
> How to get amount of digit after point in a double for to get integer from a double?
>     assert(amountAfterPoint(1.456) == 3);
>     assert(amountAfterPoint(0.00006) == 5);

How about a loop like

import std.stdio;

void main(){
	writefln("%s", 1.45.numDigits);// prints 2
	writefln("%s", 1.452343.numDigits);// prints 6
	writefln("%s", 1.0.numDigits);// prints 0
}

long numDigits(double num){
     long i=0;
     double n=num;
     while(true){
	if(n - (cast(long)n) == 0){
		return i;
	}
	i++;
         n *= 10;
     }
}
January 31, 2015
Thanks. Do I need to use rational fractions for the Currencies
class?
January 31, 2015
I want to understand the correct architecture of the class.
January 31, 2015
On Saturday, 31 January 2015 at 13:45:22 UTC, RuZzz wrote:
> I want to understand the correct architecture of the class.

Sorry, you still did not state your problem (or what you are trying to achieve) clearly.
Writing down a clear problem description is likely to get you halfway to the solution.
January 31, 2015
The next version, which does not work:
https://bpaste.net/show/b9c85de68d07
« First   ‹ Prev
1 2 3