/*
XOWA: the XOWA Offline Wiki Application
Copyright (C) 2012-2017 gnosygnu@gmail.com

XOWA is licensed under the terms of the General Public License (GPL) Version 3,
or alternatively under the terms of the Apache License Version 2.0.

You may use XOWA according to either of these licenses as is most appropriate
for your project on a case-by-case basis.

The terms of each license can be found in the source code repository:

GPLv3 License: https://github.com/gnosygnu/xowa/blob/master/LICENSE-GPLv3.txt
Apache License: https://github.com/gnosygnu/xowa/blob/master/LICENSE-APACHE2.txt
*/
package gplx;
public class Double_ {
	public static final String Cls_val_name = "double";
	public static final    Class<?> Cls_ref_type = Double.class; 
	public static final double
	  MinValue		= Double.MIN_VALUE			
	, NaN			= Double.NaN				
	, Inf_pos		= Double.POSITIVE_INFINITY	
	;
	public static final    byte[]
	  NaN_bry		= Bry_.new_a7("NaN")
	, Inf_pos_bry	= Bry_.new_a7("INF")
	;
	public static boolean IsNaN(double v) {return Double.isNaN(v);}	
	public static double cast(Object o)						{try {return (Double)o;} catch(Exception e) {throw Err_.new_type_mismatch_w_exc(e, double.class, o);}}
	public static double parse(String raw)					{try {return Double.parseDouble(raw);} catch(Exception e) {throw Err_.new_parse_exc(e, double.class, raw);}}
	public static double parse_or(String raw, double v)		{try {return Double.parseDouble(raw);} catch(Exception e) {Err_.Noop(e); return v;}}
	public static double coerce_(Object v) {
		try {String s = String_.as_(v); return s == null ? Double_.cast(v) : Double_.parse(s);}
		catch (Exception e) {throw Err_.new_cast(e, double.class, v);}
	}
	public static String To_str(double v) {
				int v_int = (int)v;
		return v - v_int == 0 ? Int_.To_str(v_int) : Double.toString(v);
			}
	public static String To_str_loose(double v) {
		int v_as_int = (int)v;			
		return v == v_as_int
			? Int_.To_str(v_as_int)		// convert to int, and call print String to eliminate any trailing decimal places
			: Float_.To_str((float)v);	// calling ((float)v).toString is better at removing trailing 0s than String.format("%g", v). note that .net .toString() handles it better; EX:2449.600000000000d; DATE:2014-07-29
	}
	public static int Compare(double lhs, double rhs) {
		if		(lhs == rhs) 	return CompareAble_.Same;
		else if (lhs < rhs)		return CompareAble_.Less;
		else 					return CompareAble_.More;
	}
}
