java60分,求助大佬

P1422 小玉家的电费

你没保留小数点后一位
by cclili @ 2022-03-06 17:30:30


```java System.out.println((int)(sum * 10)/10.0); ``` 这不是吗@[cclili](/user/690314)
by bailanxiaozi @ 2022-03-06 23:12:32


@[bailanxiaozi](/user/688916) 不是啊,强制转换成int型的话,只会保留整数部分,小数部分会强制删除的。
by cclili @ 2022-03-07 09:22:48


@[bailanxiaozi](/user/688916) 输出有格式要求的话,你可以用这个试试System.out.printf("%.1f",(要输出的数)); 这个语句就是保留小数点后一位了,当然还有其他方法。
by cclili @ 2022-03-07 09:28:25


@[cclili](/user/690314) 但是我是乘以10了之后再进行的强制类型转换,再除以10不就是保留了一位小数吗
by bailanxiaozi @ 2022-03-07 23:36:09


@[bailanxiaozi](/user/688916) 对不起,我的错。 你第二个if判断有问题,范围应该是151<=a&&a<=400.还有其中一个测试案例是输入300,结果是136.89。他保留小数点后一位的结果是136.9。所以,可能结果还要四舍五入。用先乘10再除以10.0的就做不到了。
by cclili @ 2022-03-08 08:57:32


@cclili好的,谢谢
by bailanxiaozi @ 2022-03-08 13:03:36


if (a > 151 && a <= 400) 边界值151取不到
by grigioyn @ 2022-05-12 21:47:45


```c #include<iostream> using namespace std; int main(){ int a; cin>>a; if(a<=150){ printf("%.1f",a*0.4463); } else if(a>150&&a<=400){ printf("%.1f",(a-150)*0.4663+150*0.4463); } else{ printf("%.1f",(a-400)*0.5663+150*0.4463+(400-150)*0.4663); } return 0; } ```
by nemo2010 @ 2022-07-25 10:46:46


|