double value1 = 1000
double value2 = 2563.59
System.out.println("value1 ="+String.format("%.2f",value1));
System.out.println("value2 ="String.format("%.2f",value2));
Output
value1 = 1000.00
value2 = 2563.60
这会返回1000.00
和2563.60
,但输出类型会更改为字符串。
我希望1000.00
和2563.60
作为输出而不更改数据类型。
任何人都可以帮助我吗?
dtatype必须是双倍的
答案 0 :(得分:0)
如果您不希望将其更改为字符串,请不要使用String.format(..)
。
// 2 places of decimal
DecimalFormat formatter = new DecimalFormat( "#.00" );
System.out.println(formatter.format(1.23)); // 1.23
System.out.println(formatter.format(1)); // 1.00
System.out.println(formatter.format(1.234)); // 1.23
答案 1 :(得分:0)
请注意,double
类型存储值,而不是字符串。在某些情况下,将其四舍五入到小数点后两位也不会改变。例如,值1
。如果您在String.format
上执行1
,它将变为1.00
。但是,1
和1.00
是相同的值,因此将1
转换为2位小数会再次使其成为1
。 double
认为1
和1.00
是相同的值(我的意思是,他们真的是,它的格式不同)。
另请注意,double值不准确。它可能看起来好像是1.23
,但实际上它可能类似于1.2300000000000001
。
要将双精度校正为2 d.p.,您所要做的就是将格式化的字符串转换回双精度值:
String str = String.format("%.2f",value1));
double result = Double.parseDouble(str);
答案 2 :(得分:0)
为什么你首先使用string.format?
DecimalFormat f = new DecimalFormat("##.00");
System.out.println(f.format(value1));
你需要导入java.text.DecimalFormat;为此
答案 3 :(得分:0)
使用BigDecimal.setScale()
并使用舍入模式上限
double value1 = 1000;
double value2 = 2563.59;
System.out.println("Before");
System.out.println("value1 = " + value1);
System.out.println("value2 = " + value2);
value1 = BigDecimal.valueOf(value1).setScale(1, RoundingMode.CEILING).doubleValue();
value2 = BigDecimal.valueOf(value2).setScale(1, RoundingMode.CEILING).doubleValue();
System.out.println("After");
System.out.println("value1 = " + value1);
System.out.println("value2 = " + value2);
答案 4 :(得分:0)
在任何使用有限精度的二进制浮点数 - 这是Java和大多数编程语言的默认值 - 概念"小数位数"只适用于显示。内部二进制表示没有"小数位的概念"因为数据不是小数。
因此,小数位数仅适用于数据的显示方式,与显示的数据类型无关。
当出现关于舍入十进制数的问题时,通常是因为程序员还没有完全理解浮点数学的工作原理。