It is quite easy to IMPLY a decimal point in a LONG integer - thus getting non-float accuracy. IMPLIED decimal points have been around since the big COBOL days of the 1950's.

VB6 does it with the CURRENCY datatype

Currency is a fixed-point data type, as opposed to thefloating-point Single. In other words, it is always accurate to a specificnumber of decimal places, four in this case. While the Single type canrepresent many more decimal places, these are not needed in Currencycalculations and, in fact, can introduce rounding errors. These errors aresmall but can have an effect on overall accuracy.

The Currency data type is actually an integer typeinternally. In use, it is scaled by a factor of 10,000 to give four digits tothe right of the decimal point. It permits up to 15 digits to the left of thedecimal point, resulting in a range of approximately -922,337,000,000,000 to+922,337,000,000,000. An individual type Currency variable takes up 8 bytes ofmemory, compared to 4 bytes for Single
Here's a function in JAVASCRIPT I wrote to do it in a browser - which has no DECIMAL or CURRENCY datatypes!

It all comes down to this simple line of code

intMoney = parseInt(strMoney.replace(".", ""), 10);


Code:
function parseMoney(strMoney) {
    var intMoney = parseInt(0, 10);
    var intDecimal = 0;
    var intLength = 0;
    if (strMoney.length != 0) {
        strMoney = strMoney.replace(/,/g, "").replace("$", "");
        intDecimal = strMoney.indexOf(".");
        intLength = strMoney.length;
        if (intDecimal == -1) {
            strMoney = strMoney + ".00";
        } else {
            if ((intDecimal + 3) != intLength) {
                if (intLength == (intDecimal + 1)) {
                    strMoney = strMoney + "00";
                } else if (intLength == (intDecimal + 2)) {
                    strMoney = strMoney + "0";
                } else {
                    strMoney = strMoney.substring(0, intDecimal + 3);
                }
            }
        }
        intMoney = parseInt(strMoney.replace(".", ""), 10);
    }
    return intMoney;
}

function parseCurrency(intMoney) {
    var strMoney = "";
    strMoney = String(intMoney);
    var blnIsNeg = false;
    if (strMoney.substring(0, 1) == "-") {
        blnIsNeg = true;
        strMoney = strMoney.substring(1, strMoney.length);
    }
    var intLength = strMoney.length;
    if (intLength < 3) {
        strMoney = ("000" + strMoney).substring(intLength, intLength + 3); //("00" + strMoney).substring(0, 2);
        intLength = 3;
    }
    strMoney = ((blnIsNeg) ? "-" : "") + addCommas(strMoney.substring(0, intLength - 2)) + "." + strMoney.substring(intLength - 2);
    return strMoney;
}