Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/228.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 浮点数后如何保持双精度零_Java_Android_Format - Fatal编程技术网

Java 浮点数后如何保持双精度零

Java 浮点数后如何保持双精度零,java,android,format,Java,Android,Format,我一直在想,找到了很多方法在格式化为字符串时从double中删除.0,但从来没有发现如何保留价格 DecimalFormat format = new DecimalFormat(); format.setDecimalSeparatorAlwaysShown(false); switch (position){ case 0:price = 11.90;break; case 1:price = 1.2;break; case 2:price = 1.002;break

我一直在想,找到了很多方法在格式化为字符串时从double中删除.0,但从来没有发现如何保留价格

DecimalFormat format = new DecimalFormat();
format.setDecimalSeparatorAlwaysShown(false);
switch (position){
    case 0:price = 11.90;break;
    case 1:price = 1.2;break;
    case 2:price = 1.002;break;
    case 3:price = 1.0000;break;
}
System.out.println(format.format(price));
// 11.9
// or 1.2 
// or 1.002
// or 1
但我需要的是这样的东西

// 11.90
// 1.2 
// or 1.002
// or 1 
这不是一个重复,因为这将增加00到任何价格,我不想。。。 我只是想删除浮点,如果后面有零,但是如果有数字,就保留任何零

e、 g

但是


很难理解你在这里的确切意图。我可以理解,您可能希望将1.000表示为1(这两个值之间存在实际差异,因为一个是浮点或双精度,另一个是int或long,但由于11.9和11.90之间没有差异(它们用相同的对象表示),所以可能很难区分这两个值。 除了写下每种格式的确切条件外,我的建议是在一个字符串中获取price的原始值,然后将该格式作为字符串的函数应用(这样很容易匹配endsWith(“.000”)或其他任何格式,并在其他情况下保留原始格式

1.90
1.900
1.90000
应打印相同的
1.90
1900
1.900000

不能在原语上保留尾随的零,因此
0.9
0.90
是完全相同的常数

C#有,但Java没有用于此目的的原始数据类型

Java确实有一个具有类似行为的类:

1.0
1.00
1.00000
应打印出
1

一旦使用了
BigDecimal
,就不难检查它是否是一个整数:

public static boolean isIntegerValue(BigDecimal bd) {
  return bd.signum() == 0 || bd.scale() <= 0 || bd.stripTrailingZeros().scale() <= 0;
}
public静态布尔值isIntegerValue(BigDecimal bd){

返回bd.signum()==0 | | bd.scale()首先,您确实需要指定格式。您可能必须在指定价格的同时指定格式,这两种格式都是在“开关…”情况下。因为您指定的打印格式中实际上没有图案。或者将它们打印为字符串,而不是双精度。@antoh我要找的图案是删除浮动小数“只有当它不存在时,所以任何带有x.0、x.00或x.0000000的数字都将是x,但x.20将是x。20@azurefrog我明白,但这是我必须忍受的…应该在什么时候删除尾随0?为什么应该在1.2而不是1.90中删除它?
1.90, 1.900 or 1.90000
should print out the same 1.90, 1900 or 1.900000
BigDecimal d1 = BigDecimal.valueOf(9, 1);  //  9/10^1
BigDecimal d2 = BigDecimal.valueOf(90, 2); //  9/10^2
System.out.println(d1); //0.9
System.out.println(d2); //0.90
public static boolean isIntegerValue(BigDecimal bd) {
  return bd.signum() == 0 || bd.scale() <= 0 || bd.stripTrailingZeros().scale() <= 0;
}