/**
 *                                                                            
 *  Copyright (c) 2011, 2016 - Loetz GmbH&Co.KG (69115 Heidelberg, Germany) 
 *                                                                            
 *  All rights reserved. This program and the accompanying materials           
 *  are made available under the terms of the Eclipse Public License v1.0       
 *  which accompanies this distribution, and is available at                  
 *  http://www.eclipse.org/legal/epl-v10.html                                 
 *                                                                            
 *  Contributors:                                                      
 * 	   Christophe Loetz (Loetz GmbH&Co.KG) - initial implementation
 * 
 */
 package org.eclipse.osbp.xtext.functionlibrary.common.uomo;

import java.text.DecimalFormat;

public class TempDecimalFormatWrapper {
	private Double value;
	private DecimalFormat format;
	
	public TempDecimalFormatWrapper(Double value, DecimalFormat format) {
		super();
		this.value = value;
		this.format = format;
	}
	
	public Double getValue() {
		return value;
	}
	public void setValue(Double value) {
		this.value = value;
	}
	public DecimalFormat getFormat() {
		return format;
	}
	public void setFormat(DecimalFormat format) {
		this.format = format;
	}

}
