181ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes/* 281ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes * Licensed to the Apache Software Foundation (ASF) under one or more 381ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes * contributor license agreements. See the NOTICE file distributed with 481ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes * this work for additional information regarding copyright ownership. 581ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes * The ASF licenses this file to You under the Apache License, Version 2.0 681ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes * (the "License"); you may not use this file except in compliance with 781ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes * the License. You may obtain a copy of the License at 881ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes * 981ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes * http://www.apache.org/licenses/LICENSE-2.0 1081ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes * 1181ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes * Unless required by applicable law or agreed to in writing, software 1281ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes * distributed under the License is distributed on an "AS IS" BASIS, 1381ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 1481ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes * See the License for the specific language governing permissions and 1581ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes * limitations under the License. 1681ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes */ 1781ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes/** 1881ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes * @author Elena Semukhina 1981ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes */ 2081ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes 2181ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughespackage org.apache.harmony.tests.java.math; 2281ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes 2381ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughesimport junit.framework.TestCase; 2481ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughesimport java.math.BigDecimal; 2581ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughesimport java.math.BigInteger; 2681ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes 2781ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes/** 2881ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes * Class: java.math.BigDecimal 2981ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes * Methods: doubleValue, floatValue, intValue, longValue, 3081ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes * valueOf, toString, toBigInteger 3181ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes */ 3281ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughespublic class BigDecimalConvertTest extends TestCase { 3381ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes /** 3481ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes * Double value of a negative BigDecimal 3581ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes */ 3681ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes public void testDoubleValueNeg() { 3781ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes String a = "-123809648392384754573567356745735.63567890295784902768787678287E+21"; 3881ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes BigDecimal aNumber = new BigDecimal(a); 3981ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes double result = -1.2380964839238476E53; 4081ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes assertEquals("incorrect value", result, aNumber.doubleValue(), 0); 4181ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes } 4281ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes 4381ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes /** 4481ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes * Double value of a positive BigDecimal 4581ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes */ 4681ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes public void testDoubleValuePos() { 4781ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes String a = "123809648392384754573567356745735.63567890295784902768787678287E+21"; 4881ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes BigDecimal aNumber = new BigDecimal(a); 4981ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes double result = 1.2380964839238476E53; 5081ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes assertEquals("incorrect value", result, aNumber.doubleValue(), 0); 5181ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes } 5281ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes 5381ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes /** 5481ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes * Double value of a large positive BigDecimal 5581ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes */ 5681ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes public void testDoubleValuePosInfinity() { 5781ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes String a = "123809648392384754573567356745735.63567890295784902768787678287E+400"; 5881ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes BigDecimal aNumber = new BigDecimal(a); 5981ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes double result = Double.POSITIVE_INFINITY; 6081ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes assertEquals("incorrect value", result, aNumber.doubleValue(), 0); 6181ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes } 6281ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes 6381ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes /** 6481ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes * Double value of a large negative BigDecimal 6581ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes */ 6681ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes public void testDoubleValueNegInfinity() { 6781ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes String a = "-123809648392384754573567356745735.63567890295784902768787678287E+400"; 6881ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes BigDecimal aNumber = new BigDecimal(a); 6981ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes double result = Double.NEGATIVE_INFINITY; 7081ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes assertEquals("incorrect value", result, aNumber.doubleValue(), 0); 7181ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes } 7281ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes 7381ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes /** 7481ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes * Double value of a small negative BigDecimal 7581ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes */ 7681ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes public void testDoubleValueMinusZero() { 7781ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes String a = "-123809648392384754573567356745735.63567890295784902768787678287E-400"; 7881ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes BigDecimal aNumber = new BigDecimal(a); 7981ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes long minusZero = -9223372036854775808L; 8081ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes double result = aNumber.doubleValue(); 8181ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes assertTrue("incorrect value", Double.doubleToLongBits(result) == minusZero); 8281ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes } 8381ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes 8481ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes /** 8581ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes * Double value of a small positive BigDecimal 8681ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes */ 8781ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes public void testDoubleValuePlusZero() { 8881ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes String a = "123809648392384754573567356745735.63567890295784902768787678287E-400"; 8981ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes BigDecimal aNumber = new BigDecimal(a); 9081ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes long zero = 0; 9181ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes double result = aNumber.doubleValue(); 9281ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes assertTrue("incorrect value", Double.doubleToLongBits(result) == zero); 9381ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes } 9481ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes 9581ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes /** 9681ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes * Float value of a negative BigDecimal 9781ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes */ 9881ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes public void testFloatValueNeg() { 9981ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes String a = "-1238096483923847.6356789029578E+21"; 10081ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes BigDecimal aNumber = new BigDecimal(a); 10181ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes float result = -1.2380965E36F; 10281ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes assertTrue("incorrect value", aNumber.floatValue() == result); 10381ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes } 10481ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes 10581ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes /** 10681ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes * Float value of a positive BigDecimal 10781ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes */ 10881ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes public void testFloatValuePos() { 10981ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes String a = "1238096483923847.6356789029578E+21"; 11081ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes BigDecimal aNumber = new BigDecimal(a); 11181ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes float result = 1.2380965E36F; 11281ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes assertTrue("incorrect value", aNumber.floatValue() == result); 11381ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes } 11481ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes 11581ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes /** 11681ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes * Float value of a large positive BigDecimal 11781ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes */ 11881ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes public void testFloatValuePosInfinity() { 11981ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes String a = "123809648373567356745735.6356789787678287E+200"; 12081ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes BigDecimal aNumber = new BigDecimal(a); 12181ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes float result = Float.POSITIVE_INFINITY; 12281ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes assertTrue("incorrect value", aNumber.floatValue() == result); 12381ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes } 12481ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes 12581ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes /** 12681ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes * Float value of a large negative BigDecimal 12781ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes */ 12881ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes public void testFloatValueNegInfinity() { 12981ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes String a = "-123809648392384755735.63567887678287E+200"; 13081ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes BigDecimal aNumber = new BigDecimal(a); 13181ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes float result = Float.NEGATIVE_INFINITY; 13281ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes assertTrue("incorrect value", aNumber.floatValue() == result); 13381ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes } 13481ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes 13581ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes /** 13681ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes * Float value of a small negative BigDecimal 13781ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes */ 13881ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes public void testFloatValueMinusZero() { 13981ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes String a = "-123809648392384754573567356745735.63567890295784902768787678287E-400"; 14081ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes BigDecimal aNumber = new BigDecimal(a); 14181ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes int minusZero = -2147483648; 14281ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes float result = aNumber.floatValue(); 14381ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes assertTrue("incorrect value", Float.floatToIntBits(result) == minusZero); 14481ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes } 14581ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes 14681ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes /** 14781ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes * Float value of a small positive BigDecimal 14881ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes */ 14981ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes public void testFloatValuePlusZero() { 15081ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes String a = "123809648392384754573567356745735.63567890295784902768787678287E-400"; 15181ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes BigDecimal aNumber = new BigDecimal(a); 15281ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes int zero = 0; 15381ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes float result = aNumber.floatValue(); 15481ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes assertTrue("incorrect value", Float.floatToIntBits(result) == zero); 15581ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes } 15681ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes 15781ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes /** 15881ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes * Integer value of a negative BigDecimal 15981ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes */ 16081ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes public void testIntValueNeg() { 16181ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes String a = "-123809648392384754573567356745735.63567890295784902768787678287E+21"; 16281ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes BigDecimal aNumber = new BigDecimal(a); 16381ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes int result = 218520473; 16481ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes assertTrue("incorrect value", aNumber.intValue() == result); 16581ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes } 16681ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes 16781ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes /** 16881ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes * Integer value of a positive BigDecimal 16981ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes */ 17081ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes public void testIntValuePos() { 17181ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes String a = "123809648392384754573567356745735.63567890295784902768787678287E+21"; 17281ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes BigDecimal aNumber = new BigDecimal(a); 17381ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes int result = -218520473; 17481ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes assertTrue("incorrect value", aNumber.intValue() == result); 17581ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes } 17681ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes 17781ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes /** 17881ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes * Long value of a negative BigDecimal 17981ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes */ 18081ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes public void testLongValueNeg() { 18181ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes String a = "-123809648392384754573567356745735.63567890295784902768787678287E+21"; 18281ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes BigDecimal aNumber = new BigDecimal(a); 18381ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes long result = -1246043477766677607L; 18481ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes assertTrue("incorrect value", aNumber.longValue() == result); 18581ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes } 18681ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes 18781ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes /** 18881ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes * Long value of a positive BigDecimal 18981ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes */ 19081ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes public void testLongValuePos() { 19181ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes String a = "123809648392384754573567356745735.63567890295784902768787678287E+21"; 19281ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes BigDecimal aNumber = new BigDecimal(a); 19381ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes long result = 1246043477766677607L; 19481ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes assertTrue("incorrect value", aNumber.longValue() == result); 19581ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes } 19681ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes 19781ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes /** 19881ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes * scaleByPowerOfTen(int n) 19981ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes */ 20081ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes public void testScaleByPowerOfTen1() { 20181ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes String a = "1231212478987482988429808779810457634781384756794987"; 20281ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes int aScale = 13; 20381ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes BigDecimal aNumber = new BigDecimal(new BigInteger(a), aScale); 20481ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes BigDecimal result = aNumber.scaleByPowerOfTen(10); 20581ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes String res = "1231212478987482988429808779810457634781384756794.987"; 20681ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes int resScale = 3; 20781ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes assertEquals("incorrect value", res, result.toString()); 20881ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes assertEquals("incorrect scale", resScale, result.scale()); 20981ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes } 21081ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes 21181ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes /** 21281ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes * scaleByPowerOfTen(int n) 21381ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes */ 21481ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes public void testScaleByPowerOfTen2() { 21581ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes String a = "1231212478987482988429808779810457634781384756794987"; 21681ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes int aScale = -13; 21781ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes BigDecimal aNumber = new BigDecimal(new BigInteger(a), aScale); 21881ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes BigDecimal result = aNumber.scaleByPowerOfTen(10); 21981ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes String res = "1.231212478987482988429808779810457634781384756794987E+74"; 22081ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes int resScale = -23; 22181ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes assertEquals("incorrect value", res, result.toString()); 22281ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes assertEquals("incorrect scale", resScale, result.scale()); 22381ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes } 22481ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes 22581ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes /** 22681ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes * Convert a positive BigDecimal to BigInteger 22781ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes */ 22881ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes public void testToBigIntegerPos1() { 22981ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes String a = "123809648392384754573567356745735.63567890295784902768787678287E+21"; 23081ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes BigInteger bNumber = new BigInteger("123809648392384754573567356745735635678902957849027687"); 23181ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes BigDecimal aNumber = new BigDecimal(a); 23281ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes BigInteger result = aNumber.toBigInteger(); 23381ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes assertTrue("incorrect value", result.equals(bNumber)); 23481ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes } 23581ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes 23681ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes /** 23781ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes * Convert a positive BigDecimal to BigInteger 23881ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes */ 23981ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes public void testToBigIntegerPos2() { 24081ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes String a = "123809648392384754573567356745735.63567890295784902768787678287E+15"; 24181ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes BigInteger bNumber = new BigInteger("123809648392384754573567356745735635678902957849"); 24281ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes BigDecimal aNumber = new BigDecimal(a); 24381ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes BigInteger result = aNumber.toBigInteger(); 24481ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes assertTrue("incorrect value", result.equals(bNumber)); 24581ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes } 24681ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes 24781ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes /** 24881ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes * Convert a positive BigDecimal to BigInteger 24981ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes */ 25081ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes public void testToBigIntegerPos3() { 25181ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes String a = "123809648392384754573567356745735.63567890295784902768787678287E+45"; 25281ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes BigInteger bNumber = new BigInteger("123809648392384754573567356745735635678902957849027687876782870000000000000000"); 25381ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes BigDecimal aNumber = new BigDecimal(a); 25481ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes BigInteger result = aNumber.toBigInteger(); 25581ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes assertTrue("incorrect value", result.equals(bNumber)); 25681ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes } 25781ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes 25881ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes /** 25981ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes * Convert a negative BigDecimal to BigInteger 26081ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes */ 26181ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes public void testToBigIntegerNeg1() { 26281ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes String a = "-123809648392384754573567356745735.63567890295784902768787678287E+21"; 26381ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes BigInteger bNumber = new BigInteger("-123809648392384754573567356745735635678902957849027687"); 26481ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes BigDecimal aNumber = new BigDecimal(a); 26581ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes BigInteger result = aNumber.toBigInteger(); 26681ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes assertTrue("incorrect value", result.equals(bNumber)); 26781ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes } 26881ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes 26981ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes /** 27081ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes * Convert a negative BigDecimal to BigInteger 27181ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes */ 27281ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes public void testToBigIntegerNeg2() { 27381ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes String a = "-123809648392384754573567356745735.63567890295784902768787678287E+15"; 27481ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes BigInteger bNumber = new BigInteger("-123809648392384754573567356745735635678902957849"); 27581ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes BigDecimal aNumber = new BigDecimal(a); 27681ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes BigInteger result = aNumber.toBigInteger(); 27781ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes assertTrue("incorrect value", result.equals(bNumber)); 27881ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes } 27981ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes 28081ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes /** 28181ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes * Convert a negative BigDecimal to BigInteger 28281ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes */ 28381ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes public void testToBigIntegerNeg3() { 28481ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes String a = "-123809648392384754573567356745735.63567890295784902768787678287E+45"; 28581ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes BigInteger bNumber = new BigInteger("-123809648392384754573567356745735635678902957849027687876782870000000000000000"); 28681ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes BigDecimal aNumber = new BigDecimal(a); 28781ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes BigInteger result = aNumber.toBigInteger(); 28881ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes assertTrue("incorrect value", result.equals(bNumber)); 28981ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes } 29081ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes 29181ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes /** 29281ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes * Convert a small BigDecimal to BigInteger 29381ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes */ 29481ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes public void testToBigIntegerZero() { 29581ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes String a = "-123809648392384754573567356745735.63567890295784902768787678287E-500"; 29681ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes BigInteger bNumber = new BigInteger("0"); 29781ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes BigDecimal aNumber = new BigDecimal(a); 29881ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes BigInteger result = aNumber.toBigInteger(); 29981ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes assertTrue("incorrect value", result.equals(bNumber)); 30081ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes } 30181ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes 30281ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes /** 30381ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes * toBigIntegerExact() 30481ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes */ 30581ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes public void testToBigIntegerExact1() { 30681ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes String a = "-123809648392384754573567356745735.63567890295784902768787678287E+45"; 30781ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes BigDecimal aNumber = new BigDecimal(a); 30881ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes String res = "-123809648392384754573567356745735635678902957849027687876782870000000000000000"; 30981ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes BigInteger result = aNumber.toBigIntegerExact(); 31081ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes assertEquals("incorrect value", res, result.toString()); 31181ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes } 31281ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes 31381ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes /** 31481ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes * toBigIntegerExact() 31581ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes */ 31681ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes public void testToBigIntegerExactException() { 31781ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes String a = "-123809648392384754573567356745735.63567890295784902768787678287E-10"; 31881ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes BigDecimal aNumber = new BigDecimal(a); 31981ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes try { 32081ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes aNumber.toBigIntegerExact(); 32181ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes fail("java.lang.ArithmeticException has not been thrown"); 32281ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes } catch (java.lang.ArithmeticException e) { 32381ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes return; 32481ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes } 32581ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes } 32681ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes 32781ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes /** 32881ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes * Convert a positive BigDecimal to an engineering string representation 32981ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes */ 33081ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes public void testToEngineeringStringPos() { 33181ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes String a = "123809648392384754573567356745735.63567890295784902768787678287E-501"; 33281ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes BigDecimal aNumber = new BigDecimal(a); 33381ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes String result = "123.80964839238475457356735674573563567890295784902768787678287E-471"; 33481ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes assertEquals("incorrect value", result, aNumber.toEngineeringString()); 33581ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes } 33681ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes 33781ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes /** 33881ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes * Convert a negative BigDecimal to an engineering string representation 33981ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes */ 34081ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes public void testToEngineeringStringNeg() { 34181ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes String a = "-123809648392384754573567356745735.63567890295784902768787678287E-501"; 34281ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes BigDecimal aNumber = new BigDecimal(a); 34381ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes String result = "-123.80964839238475457356735674573563567890295784902768787678287E-471"; 34481ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes assertEquals("incorrect value", result, aNumber.toEngineeringString()); 34581ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes } 34681ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes 34781ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes /** 34881ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes * Convert a negative BigDecimal to an engineering string representation 34981ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes */ 35081ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes public void testToEngineeringStringZeroPosExponent() { 35181ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes String a = "0.0E+16"; 35281ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes BigDecimal aNumber = new BigDecimal(a); 35381ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes String result = "0E+15"; 35481ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes assertEquals("incorrect value", result, aNumber.toEngineeringString()); 35581ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes } 35681ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes 35781ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes /** 35881ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes * Convert a negative BigDecimal to an engineering string representation 35981ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes */ 36081ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes public void testToEngineeringStringZeroNegExponent() { 36181ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes String a = "0.0E-16"; 36281ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes BigDecimal aNumber = new BigDecimal(a); 36381ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes String result = "0.00E-15"; 36481ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes assertEquals("incorrect value", result, aNumber.toEngineeringString()); 36581ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes } 36681ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes 36781ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes /** 36881ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes * Convert a negative BigDecimal with a negative exponent to a plain string 36981ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes * representation; scale == 0. 37081ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes */ 37181ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes public void testToPlainStringNegNegExp() { 37281ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes String a = "-123809648392384754573567356745735.63567890295784902768787678287E-100"; 37381ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes BigDecimal aNumber = new BigDecimal(a); 37481ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes String result = "-0.000000000000000000000000000000000000000000000000000000000000000000012380964839238475457356735674573563567890295784902768787678287"; 37581ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes assertTrue("incorrect value", aNumber.toPlainString().equals(result)); 37681ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes } 37781ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes 37881ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes /** 37981ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes * Convert a negative BigDecimal with a positive exponent 38081ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes * to a plain string representation; 38181ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes * scale == 0. 38281ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes */ 38381ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes public void testToPlainStringNegPosExp() { 38481ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes String a = "-123809648392384754573567356745735.63567890295784902768787678287E100"; 38581ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes BigDecimal aNumber = new BigDecimal(a); 38681ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes String result = "-1238096483923847545735673567457356356789029578490276878767828700000000000000000000000000000000000000000000000000000000000000000000000"; 38781ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes assertTrue("incorrect value", aNumber.toPlainString().equals(result)); 38881ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes } 38981ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes 39081ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes /** 39181ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes * Convert a positive BigDecimal with a negative exponent 39281ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes * to a plain string representation; 39381ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes * scale == 0. 39481ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes */ 39581ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes public void testToPlainStringPosNegExp() { 39681ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes String a = "123809648392384754573567356745735.63567890295784902768787678287E-100"; 39781ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes BigDecimal aNumber = new BigDecimal(a); 39881ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes String result = "0.000000000000000000000000000000000000000000000000000000000000000000012380964839238475457356735674573563567890295784902768787678287"; 39981ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes assertTrue("incorrect value", aNumber.toPlainString().equals(result)); 40081ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes } 40181ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes 40281ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes /** 40381ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes * Convert a negative BigDecimal with a negative exponent 40481ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes * to a plain string representation; 40581ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes * scale == 0. 40681ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes */ 40781ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes public void testToPlainStringPosPosExp() { 40881ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes String a = "123809648392384754573567356745735.63567890295784902768787678287E+100"; 40981ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes BigDecimal aNumber = new BigDecimal(a); 41081ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes String result = "1238096483923847545735673567457356356789029578490276878767828700000000000000000000000000000000000000000000000000000000000000000000000"; 41181ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes assertTrue("incorrect value", aNumber.toPlainString().equals(result)); 41281ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes } 41381ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes 41481ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes /** 41581ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes * Convert a BigDecimal to a string representation; 41681ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes * scale == 0. 41781ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes */ 41881ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes public void testToStringZeroScale() { 41981ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes String a = "-123809648392384754573567356745735635678902957849027687876782870"; 42081ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes BigDecimal aNumber = new BigDecimal(new BigInteger(a)); 42181ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes String result = "-123809648392384754573567356745735635678902957849027687876782870"; 42281ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes assertTrue("incorrect value", aNumber.toString().equals(result)); 42381ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes } 42481ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes 42581ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes /** 42681ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes * Convert a positive BigDecimal to a string representation 42781ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes */ 42881ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes public void testToStringPos() { 42981ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes String a = "123809648392384754573567356745735.63567890295784902768787678287E-500"; 43081ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes BigDecimal aNumber = new BigDecimal(a); 43181ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes String result = "1.2380964839238475457356735674573563567890295784902768787678287E-468"; 43281ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes assertTrue("incorrect value", aNumber.toString().equals(result)); 43381ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes } 43481ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes 43581ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes /** 43681ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes * Convert a negative BigDecimal to a string representation 43781ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes */ 43881ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes public void testToStringNeg() { 43981ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes String a = "-123.4564563673567380964839238475457356735674573563567890295784902768787678287E-5"; 44081ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes BigDecimal aNumber = new BigDecimal(a); 44181ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes String result = "-0.001234564563673567380964839238475457356735674573563567890295784902768787678287"; 44281ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes assertTrue("incorrect value", aNumber.toString().equals(result)); 44381ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes } 44481ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes 44581ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes /** 44681ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes * Create a BigDecimal from a positive long value; scale == 0 44781ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes */ 44881ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes public void testValueOfPosZeroScale() { 44981ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes long a = 98374823947823578L; 45081ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes BigDecimal aNumber = BigDecimal.valueOf(a); 45181ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes String result = "98374823947823578"; 45281ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes assertTrue("incorrect value", aNumber.toString().equals(result)); 45381ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes } 45481ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes 45581ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes /** 45681ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes * Create a BigDecimal from a negative long value; scale is 0 45781ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes */ 45881ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes public void testValueOfNegZeroScale() { 45981ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes long a = -98374823947823578L; 46081ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes BigDecimal aNumber = BigDecimal.valueOf(a); 46181ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes String result = "-98374823947823578"; 46281ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes assertTrue("incorrect value", aNumber.toString().equals(result)); 46381ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes } 46481ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes 46581ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes /** 46681ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes * Create a BigDecimal from a negative long value; scale is positive 46781ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes */ 46881ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes public void testValueOfNegScalePos() { 46981ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes long a = -98374823947823578L; 47081ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes int scale = 12; 47181ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes BigDecimal aNumber = BigDecimal.valueOf(a, scale); 47281ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes String result = "-98374.823947823578"; 47381ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes assertTrue("incorrect value", aNumber.toString().equals(result)); 47481ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes } 47581ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes 47681ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes /** 47781ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes * Create a BigDecimal from a negative long value; scale is negative 47881ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes */ 47981ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes public void testValueOfNegScaleNeg() { 48081ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes long a = -98374823947823578L; 48181ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes int scale = -12; 48281ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes BigDecimal aNumber = BigDecimal.valueOf(a, scale); 48381ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes String result = "-9.8374823947823578E+28"; 48481ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes assertTrue("incorrect value", aNumber.toString().equals(result)); 48581ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes } 48681ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes 48781ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes /** 48881ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes * Create a BigDecimal from a negative long value; scale is positive 48981ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes */ 49081ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes public void testValueOfPosScalePos() { 49181ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes long a = 98374823947823578L; 49281ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes int scale = 12; 49381ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes BigDecimal aNumber = BigDecimal.valueOf(a, scale); 49481ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes String result = "98374.823947823578"; 49581ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes assertTrue("incorrect value", aNumber.toString().equals(result)); 49681ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes } 49781ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes 49881ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes /** 49981ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes * Create a BigDecimal from a negative long value; scale is negative 50081ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes */ 50181ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes public void testValueOfPosScaleNeg() { 50281ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes long a = 98374823947823578L; 50381ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes int scale = -12; 50481ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes BigDecimal aNumber = BigDecimal.valueOf(a, scale); 50581ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes String result = "9.8374823947823578E+28"; 50681ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes assertTrue("incorrect value", aNumber.toString().equals(result)); 50781ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes } 50881ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes 50981ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes /** 51081ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes * Create a BigDecimal from a negative double value 51181ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes */ 51281ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes public void testValueOfDoubleNeg() { 51381ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes double a = -65678765876567576.98788767; 51481ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes BigDecimal result = BigDecimal.valueOf(a); 51581ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes String res = "-65678765876567576"; 51681ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes int resScale = 0; 51781ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes assertEquals("incorrect value", res, result.toString()); 51881ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes assertEquals("incorrect scale", resScale, result.scale()); 51981ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes } 52081ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes 52181ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes /** 52281ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes * Create a BigDecimal from a positive double value 52381ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes */ 52481ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes public void testValueOfDoublePos1() { 52581ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes double a = 65678765876567576.98788767; 52681ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes BigDecimal result = BigDecimal.valueOf(a); 52781ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes String res = "65678765876567576"; 52881ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes int resScale = 0; 52981ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes assertEquals("incorrect value", res, result.toString()); 53081ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes assertEquals("incorrect scale", resScale, result.scale()); 53181ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes } 53281ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes 53381ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes /** 53481ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes * Create a BigDecimal from a positive double value 53581ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes */ 53681ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes public void testValueOfDoublePos2() { 53781ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes double a = 12321237576.98788767; 53881ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes BigDecimal result = BigDecimal.valueOf(a); 53981ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes String res = "12321237576.987888"; 54081ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes int resScale = 6; 54181ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes assertEquals("incorrect value", res, result.toString()); 54281ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes assertEquals("incorrect scale", resScale, result.scale()); 54381ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes } 54481ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes 54581ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes /** 54681ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes * Create a BigDecimal from a positive double value 54781ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes */ 54881ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes public void testValueOfDoublePos3() { 54981ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes double a = 12321237576.9878838; 55081ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes BigDecimal result = BigDecimal.valueOf(a); 55181ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes String res = "12321237576.987885"; 55281ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes int resScale = 6; 55381ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes assertEquals("incorrect value", res, result.toString()); 55481ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes assertEquals("incorrect scale", resScale, result.scale()); 55581ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes } 55681ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes 55781ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes /** 55881ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes * valueOf(Double.NaN) 55981ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes */ 56081ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes public void testValueOfDoubleNaN() { 56181ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes double a = Double.NaN; 56281ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes try { 56381ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes BigDecimal.valueOf(a); 56481ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes fail("NumberFormatException has not been thrown for Double.NaN"); 56581ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes } catch (NumberFormatException e) { 56681ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes return; 56781ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes } 56881ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes } 56981ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes} 570