如果它有分数,我试图将double格式化为精确2个小数位,否则使用DecimalFormat将其剪掉;
所以,我想要获得下一个结果:
100.123 -> 100.12
100.12 -> 100.12
100.1 -> 100.10
100 -> 100
变体#1
DecimalFormat("#,##0.00")
100.1 -> 100.10
but
100 -> 100.00
变体#2
DecimalFormat("#,##0.##")
100 -> 100
but
100.1 -> 100.1
有什么想法可以选择我的案例吗?
答案 0 :(得分:3)
我达到的唯一解决方案是使用 if 语句,如下所述:https://stackoverflow.com/a/39268176/6619441
$args = array(
'post_type' => 'event',
'posts_per_page' => '1',
'meta_query' => array(
array(
'key' => 'sponsored_event',
'compare' => '=',
'value' => 'yes',
),
),
);
测试
public static boolean isInteger(BigDecimal bigDecimal) {
int intVal = bigDecimal.intValue();
return bigDecimal.compareTo(new BigDecimal(intVal)) == 0;
}
public static String myFormat(BigDecimal bigDecimal) {
String formatPattern = isInteger(bigDecimal) ? "#,##0" : "#,##0.00";
return new DecimalFormat(formatPattern).format(bigDecimal);
}
如果有人知道更优雅的方式,请分享!
答案 1 :(得分:0)
我认为我们需要一个if语句。
static double intMargin = 1e-14;
public static String myFormat(double d) {
DecimalFormat format;
// is value an integer?
if (Math.abs(d - Math.round(d)) < intMargin) { // close enough
format = new DecimalFormat("#,##0.##");
} else {
format = new DecimalFormat("#,##0.00");
}
return format.format(d);
}
应根据情况选择允许将数字视为整数的余量。只是不要以为你总是会有一个完整的整数,你期望一个,双打并不总是这样。
通过上述声明myFormat(4)
返回4
,myFormat(4.98)
返回4.98
,myFormat(4.0001)
返回4.00
。