有没有人知道如何将双倍数值转化为3个重要数字,如本网站上的示例
可能重复:
将小数点后的双精度数加到2位有效数字
如何在点后将双倍转换为2个数字?
例如:
double x=123.45678;
Run Code Online (Sandbox Code Playgroud)
我需要x=123.45(在java中为android)
提前致谢
如何在不使用DecimalFormat?的情况下将双精度数转换为5位小数?
可能重复:
将小数点后的双精度数加到2位有效数字
我正在尝试将十进制度(23.1248)转换为分钟样式度(23 7'29.3").这是我到目前为止所做的:
double a=23.1248;
int deg=(int)a;//gives me the degree
float b=(float) (a-deg);
int min=(int) (b*60);//gives me the minutes
double sec= (double) ((c*60)-min);//gives me my seconds
Run Code Online (Sandbox Code Playgroud)
一切正常,但我希望将秒数舍入到最接近的十分之一或十分之一.我已经查看了十进制格式,但不希望将其转换为字符串.我也看过bigdecimal,但不认为这会有所帮助,
我使用TextView作为一行通过SimpleCursorAdapter填充ListView.TextView中的数字显示为8或2.6786等.我希望它们显示为8.00或2.67等.可以通过XML完成(如输入类型方法)等.)请建议一个出路.问题有点不同,如下:代码是:
// THE DESIRED COLUMNS TO BE BOUND
columns = new String[] { slStock.KEY_SCRIPT, getColumnName(2),c.getColumnName(3)};
// THE XML DEFINED VIEWS FOR EACH FIELD TO BE BOUND TO
to = new int[] { R.id.tvstockscrpt, R.id.tvqty ,R.id.tvstockrate};
// CREATE ADAPTER WITH CURSOR POINTING TO DESIRED DATA
SimpleCursorAdapter cursAdapter = new SimpleCursorAdapter(this,R.layout.rowstock, c,columns, to);
lvstockdisplay.setAdapter(cursAdapter);
Run Code Online (Sandbox Code Playgroud)
在这里您将注意到光标c获取数据(来自后台的数据库查询)并直接在ListView中填充它.问题是我如何格式化光标数据,例如Text的id为(R.id.tvstockrate)和由c.getColumnNames(3)填充.在代码中的哪一点可以插入格式语句.
我想将我的double值舍入到N个小数位(比如说一个),实际上只是省略了后面的所有数字:
0.123 #=> 0.1
0.19 #=> 0.1
0.2 #=> 0.2
Run Code Online (Sandbox Code Playgroud)
这个问题已经多次提出,例如这里和这里.推荐的方法是使用BigDecimal然后缩放它,特别是为了避免昂贵的转换为字符串和返回.我需要的舍入模式显然是RoundingMode.DOWN.
所以方法是这样的:
static double truncate(double value, int places) {
return new BigDecimal(value)
.setScale(places, RoundingMode.DOWN)
.doubleValue();
}
Run Code Online (Sandbox Code Playgroud)
但是,由于精度的降低,它会带来一些意想不到的结果:
truncate(0.2, 1) #=> 0.2
truncate(0.3, 1) #=> 0.2
truncate(0.4, 1) #=> 0.4
truncate(0.2, 3) #=> 0.2
truncate(0.3, 3) #=> 0.299
truncate(0.4, 3) #=> 0.4
Run Code Online (Sandbox Code Playgroud)
这引出了两个问题:
是它应该如何工作0.3?为什么在这种情况下会失去精确度?难道它没有击败拥有的全部目的BigDecimal吗?
如何正确截断我的值?
谢谢.
可能重复:
将小数点后的双精度数加到2位有效数字
我需要最多 N个小数,不多,但我不想尾随零.例如,如果N = 2则
15.352
15.355
15.3
15
应该(分别)
15.35
15.36
15.3
15
我已经阅读了这个问题将双精度舍入到小数点后两位它显示了如何舍入数字。我想要的只是简单的格式,只打印两位小数。我所拥有的和我尝试过的:
double res = 24.695999999999998;
DecimalFormat df = new DecimalFormat("####0.00");
System.out.println("Value: " + df.format(res)); //prints 24.70 and I want 24.69
System.out.println("Total: " + String.format( "%.2f", res )); //prints 24.70
Run Code Online (Sandbox Code Playgroud)
所以当我有 24.695999999999998 我想把它格式化为 24.69
可能重复:
将小数点后的双精度数加到2位有效数字
我有一个价值var i = 0.69999980926513672.我需要将此值舍入到0.7是否有内置方法可以执行此操作?
我有一个简短的等式:
double compute,computed2;
compute=getminutes/60;
Run Code Online (Sandbox Code Playgroud)
这里getminutes是int我想设置相当于compute有2位小数.0.00如何格式化2位小数的等效?
例:
compute=45/60 it should be 0.75
Run Code Online (Sandbox Code Playgroud)
这是我的工作:
DecimalFormat df2 = new DecimalFormat("00.00000");
double computed,computed2 = 00.000;
computed=60/getitbyminutes;
df2.format(computed);
computed2=computed-8;
df2.format(computed2);
System.out.printf("%1$.2f",computed);
System.out.println();
System.out.printf("%1$.2f",computed2);
Run Code Online (Sandbox Code Playgroud)
输出将如下:
1.00
7.00
Run Code Online (Sandbox Code Playgroud)