自我标记:DecimalFormat格式控制
辣鸡小玲的题解
UVA474 JAVA版
Heads / Tails Probability
这题有点坑的是printf的时候,格式控制%.3f居然会被WA,我没太懂为啥%.3f被WA,作为一个MARK我会补出我的WA代码,说不定以后回来看的时候就懂了噢。
打表的算法是抄了 小白菜又菜 的C++版本,这种抄,不知道算不算抄噢,超链接引用过去了噢。
import java.util.*;
import java.text.DecimalFormat;
import java.util.Scanner;
public class Main {
public static void main(String args[]) {
// 打表计算,查询输出
double val[] = new double[1000005];
int bit[] = new int[1000005];
val[0] = 1;
bit[0] = 0;
for (int i = 1; i < 1000001; i++) {
val[i] = val[i - 1] / 2;
bit[i] = bit[i - 1];
if (val[i] < 1) {
val[i] *= 10;
bit[i]--;
}
}
Scanner reader = new Scanner(System.in);
int n;
while (reader.hasNext()) {
n = reader.nextInt();
//MARK Ⅰ以下四行代码格式输出,本该可以用一行搞定的,我深入研究下第二行
System.out.printf("2^-%d = ", n);
DecimalFormat df = new DecimalFormat("0.000");//MARK Ⅱ
System.out.print(df.format(val[n]));
System.out.printf("e%d\n", bit[n]);
}
}
}
MARKⅠ
如果这四行这样输出:
System.out.printf("2^-%d = %.3fe%d\n",n,val[n],bit[n]);
看着也没有问题对不对,运行也是OK的,可是就是被WA了,我哭
MARK Ⅰ ending
CSND真是个好东西,查啥有啥
此处引用: icecoola_(叫冰阔落?)的《JAVA_DecimalFormat数字格式化_小数_保留两位》
double pi=3.1415927;//圆周率
//取一位整数
System.out.println(new DecimalFormat("0").format(pi));//3
//取一位整数和两位小数
System.out.println(new DecimalFormat("0.00").format(pi));//3.14
//取两位整数和三位小数,整数不足部分以0填补。
System.out.println(new DecimalFormat("00.000").format(pi));//03.142
//取所有整数部分
System.out.println(new DecimalFormat("#").format(pi));//3
//以百分比方式计数,并取两位小数
System.out.println(new DecimalFormat("#.##%").format(pi));//314.16%
long c=299792458;//光速
//显示为科学计数法,并取五位小数
System.out.println(new DecimalFormat("#.#####E0").format(c));//2.99792E8
//显示为两位整数的科学计数法,并取四位小数
System.out.println(new DecimalFormat("00.####E0").format(c));//29.9792E7
//每三位以逗号进行分隔。
System.out.println(new DecimalFormat(",###").format(c));//299,792,458
//将格式嵌入文本
System.out.println(new DecimalFormat("光速大小为每秒,###米").format(c));
//光速大小为每秒299,792,458米
特殊字符说明
“0” 指定位置不存在数字则显示为0 123.123 ->0000.0000 ->0123.1230
“#” 指定位置不存在数字则不显示 123.123 -> ####.#### ->123.123
“.” 小数点
“%” 会将结果数字乘以100 后面再加上% 123.123 ->#.00->1.3212%
还有我室友这种,创建对象的方法噢:
DecimalFormat df = new DecimalFormat("0.000");
System.out.print(df.format(val[n]));