You should not use BigDecimal d = new BigDecimal(long); !!
The implementation in BigDecimal for longs is not precise. For financial applications this is critical!
But the implementation for the String argument is better! So use something like:
new BigDecimal(yourLong.toString());
There was a talk on http://www.parleys.com/ about this.