org.kapott.hbci.structures.Value Maven / Gradle / Ivy
Go to download
Show more of this group Show more artifacts with this name
Show all versions of hbci4j-core Show documentation
Show all versions of hbci4j-core Show documentation
HBCI4j - Home Banking Computer Interface for Java
/**********************************************************************
*
* This file is part of HBCI4Java.
* Copyright (c) 2001-2008 Stefan Palme
*
* This library is free software; you can redistribute it and/or
* modify it under the terms of the GNU Lesser General Public
* License as published by the Free Software Foundation; either
* version 2.1 of the License, or (at your option) any later version.
*
* This library is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
* Lesser General Public License for more details.
*
* You should have received a copy of the GNU Lesser General Public
* License along with this library; if not, write to the Free Software
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
*
**********************************************************************/
package org.kapott.hbci.structures;
import java.io.Serializable;
import java.math.BigDecimal;
import org.kapott.hbci.manager.HBCIUtils;
/** Darstellung eines Geldbetrages. */
public final class Value
implements Serializable
{
private static final BigDecimal ONE_HUNDRED = new BigDecimal("100.00");
/** Numerischer Wert des Betrages mal 100*/
private long value;
/** Währung. Für EURO ist hier EUR
zu benutzen. */
private String curr;
/** Anlegen eines neuen Objektes zur Aufnahme eines Geldbetrages. Vorbelegung
* ist der Wert "0 EUR" */
public Value()
{
this(0,"EUR");
}
/** Anlegen eines Geldbetrag-Objektes. Die Währung wird mit EUR
vorbelegt.
@param value der Geldbetrag (1.23)
@deprecated */
@Deprecated
public Value(double value)
{
this(Math.round(100.0*value),"EUR");
}
/** Anlegen eines Geldbetrag-Objektes. Die Währung wird mit EUR
vorbelegt.
@param value der Geldbetrag mal 100 (123) */
public Value(long value)
{
this(value,"EUR");
}
/** Anlegen eines Geldbetrag-Objektes. Die Währung wird mit EUR
vorbelegt.
@param value der Geldbetrag als String ("1.23") */
public Value(String value)
{
this(value,"EUR");
}
/** Anlegen eines Geldbetrag-Objektes. Die Währung wird mit EUR
vorbelegt.
@param value der Geldbetrag als String ("1.23") */
public Value(BigDecimal value)
{
this(value,"EUR");
}
/** Anlegen eines Geldbetrag-Objektes.
@param value der Geldbetrag als String ("1.23")
@param curr die Währung des Geldbetrages */
public Value(String value,String curr)
{
this(new BigDecimal(value.replace(" ","")),curr);
}
/** Anlegen eines Geldbetrag-Objektes.
@param value der Geldbetrag (1.23)
@param curr die Währung des Geldbetrages
@deprecated */
@Deprecated
public Value(double value,String curr)
{
this(Math.round(100.0*value),curr);
}
/** Anlegen eines Geldbetrag-Objektes.
@param value der Geldbetrag mal 100 (123)
@param curr die Währung des Geldbetrages */
public Value(long value,String curr)
{
this.value=value;
this.curr=curr;
}
/** Anlegen eines Geldbetrag-Objektes.
@param value der Geldbetrag (1.23).
@param curr die Währung des Geldbetrages */
public Value(BigDecimal value,String curr)
{
this.value=value.multiply(ONE_HUNDRED).longValueExact();
this.curr=curr;
}
/** Erstellt eine neue Instanz eines Geldbetrag-Objektes als Kopie
eines bestehenden Objektes.
@param v ein Objekt, welches geklont werden soll */
public Value(Value v)
{
this(v.value,v.curr);
}
/** Umwandeln in einen String. Die Rückgabe erfolgt im Format
<value> " " <curr>
@return Stringdarstellung des Geldbetrages */
@Override
public String toString()
{
return HBCIUtils.bigDecimal2String(new BigDecimal(value).divide(ONE_HUNDRED))+" "+curr;
}
/** Gibt den Betrag mal 100 als Ganzzahl zurück */
public long getLongValue()
{
return value;
}
/** Gibt den Betrag als Fließkommazahl zurück */
@Deprecated
public double getDoubleValue()
{
return value/100.0;
}
public BigDecimal getBigDecimalValue() {
BigDecimal result = new BigDecimal(value).divide(ONE_HUNDRED);
result.setScale(2, BigDecimal.ROUND_HALF_EVEN);
return result;
}
/** Gibt die Währung zurück */
public String getCurr()
{
return curr;
}
/** Setzt den Betrag neu.
* @param value Betrag (1.23)
* @deprecated */
public void setValue(double value)
{
setValue(Math.round(100.0*value));
}
/** Setzt den Betrag neu. Der hier angegebene Wert entspricht dem
* eigentlichen Betrag mal 100.
* @param value Der Betrag mal 100 */
public void setValue(long value)
{
this.value=value;
}
/**
* Setzt den Betrag neu. Der hier angegebene Wert entspricht dem Betrag mal 100. Wenn der
* Wert Centbruchteile enthält, welche wegfallen würden, wird eine Exception geworfen.
*
* @param value Der Betrag mal 100
*/
public void setValue(BigDecimal value)
{
this.value = value.multiply(ONE_HUNDRED).longValueExact();
}
/** Setzt die Währung neu.
* @param curr die Währung */
public void setCurr(String curr)
{
this.curr=curr;
}
}