求值语句
为了能表示出科学计数法,我们得让数小一点:
BigDecimal num = new BigDecimal(0.2333).pow(20);
打印结果
System.out.println(num);
2.28189037167401120969664016458058704445821447776153697856333722521431496331550551213930891906957487435112104808347862419891420033162248142531663995155772279146232315410060206987151178648426698855546081020777110688844170619669193518453985280966919855312604013430815833563803446476005419063873594466971526322215177750276141448913214334808975521236293623113834028980688572444044246581431849340824046219938314943100698334559217720778436613420267026603092024290999790614071820410967350767900092513471798538644190754888725556844272602124114705649986642100894001740207945946131697703242257894368252834211931168108684805772879141748782976829469911671275574176661389794305239001858006008883235021362729155223312931934657673225453759580180785170264139962848926240405883081486320326522336957649286875366094925648693739077878530704550560566747517994737139860236090744552245807066682260105331670524231711427517062910685789869039060383532495613756103646363461215507160773269224241213935868860166499926337883991102182710785104859748632046196649414415702494807192124426364898681640625E-13
toString()打印结果
结果是一样的,因为我们其实也知道在打印num的时候其实默认就是打印num.toString()啦!
System.out.println(num.toString());
2.28189037167401120969664016458058704445821447776153697856333722521431496331550551213930891906957487435112104808347862419891420033162248142531663995155772279146232315410060206987151178648426698855546081020777110688844170619669193518453985280966919855312604013430815833563803446476005419063873594466971526322215177750276141448913214334808975521236293623113834028980688572444044246581431849340824046219938314943100698334559217720778436613420267026603092024290999790614071820410967350767900092513471798538644190754888725556844272602124114705649986642100894001740207945946131697703242257894368252834211931168108684805772879141748782976829469911671275574176661389794305239001858006008883235021362729155223312931934657673225453759580180785170264139962848926240405883081486320326522336957649286875366094925648693739077878530704550560566747517994737139860236090744552245807066682260105331670524231711427517062910685789869039060383532495613756103646363461215507160773269224241213935868860166499926337883991102182710785104859748632046196649414415702494807192124426364898681640625E-13
toPlainString()打印结果
这次,可有点不同啦!
System.out.println(num.toPlainString());
0.000000000000228189037167401120969664016458058704445821447776153697856333722521431496331550551213930891906957487435112104808347862419891420033162248142531663995155772279146232315410060206987151178648426698855546081020777110688844170619669193518453985280966919855312604013430815833563803446476005419063873594466971526322215177750276141448913214334808975521236293623113834028980688572444044246581431849340824046219938314943100698334559217720778436613420267026603092024290999790614071820410967350767900092513471798538644190754888725556844272602124114705649986642100894001740207945946131697703242257894368252834211931168108684805772879141748782976829469911671275574176661389794305239001858006008883235021362729155223312931934657673225453759580180785170264139962848926240405883081486320326522336957649286875366094925648693739077878530704550560566747517994737139860236090744552245807066682260105331670524231711427517062910685789869039060383532495613756103646363461215507160773269224241213935868860166499926337883991102182710785104859748632046196649414415702494807192124426364898681640625
总结
对于一个数值可能很小的BigDecimal对象来说,使用toString()可能由于打印的数值太小而打印其科学计数法表示,而使用toPlainString()才能打印完整的数值。
完整代码import java.math.BigDecimal;
public class BigDecimalTest {
public static void main(String[] args) {
BigDecimal num = new BigDecimal(0.2333).pow(20);
System.out.println(num);
System.out.println(num.toString());
System.out.println(num.toPlainString());
}
}
说明
例子的结果不能不够小,否则可能误认为三者一样。
比如最早我测的是这个:
import java.math.BigDecimal;
public class BigDecimalTest {
public static void main(String[] args) {
BigDecimal num = new BigDecimal(0.66).pow(10);
System.out.println(num);
System.out.println(num.toString());
System.out.println(num.toPlainString());
}
}
但结果很悲催:
>java BigDecimalTest
0.01568336880910796514692485387380358722432090658674607795185185558463356941593280438333875994123155412243735195834705140991618787447848128774946858219534786702323782812590762928242630260751971484116602400344065713771468254349752623195976497313013575753886310637762485552492886146251661530527797289372428420293315321412564193962492477328625977419079453856979274761289232833572242408303626740680597755011834774326410628545344183904639899408459342093849694664301730220414247643012754939939265054482664396573454723693430423736572265625
0.01568336880910796514692485387380358722432090658674607795185185558463356941593280438333875994123155412243735195834705140991618787447848128774946858219534786702323782812590762928242630260751971484116602400344065713771468254349752623195976497313013575753886310637762485552492886146251661530527797289372428420293315321412564193962492477328625977419079453856979274761289232833572242408303626740680597755011834774326410628545344183904639899408459342093849694664301730220414247643012754939939265054482664396573454723693430423736572265625
0.01568336880910796514692485387380358722432090658674607795185185558463356941593280438333875994123155412243735195834705140991618787447848128774946858219534786702323782812590762928242630260751971484116602400344065713771468254349752623195976497313013575753886310637762485552492886146251661530527797289372428420293315321412564193962492477328625977419079453856979274761289232833572242408303626740680597755011834774326410628545344183904639899408459342093849694664301730220414247643012754939939265054482664396573454723693430423736572265625
这很容易令人迷惑哒~