蓝桥杯基础-002-Circle_Square

本文介绍了一种在Java中精确控制输出double类型数值小数点后有效位数的方法,利用DecimalFormat类实现7位小数点精度的显示,并提供了一个简单的示例程序。

题意

控制double小数点后有效位数为7

代码

import java.text.DecimalFormat;
import java.util.Scanner;


public class Main {

public static void main(String[] args) {

Scanner keyin = new Scanner(System.in);int radius = keyin.nextInt();

//得分70分 -> 不能将其转换回double了

// System.out.println(Double.parseDouble((new DecimalFormat("0.0000000").format(Math.PI*radius*radius))));

System.out.println(new DecimalFormat("0.0000000").format(Math.PI*radius*radius));

}
}

Summary

 DecimalFormat : String的使用(小数点有效位数) -> new DecimalFormat("0.小数点后有效位数 个 zero") : String | 且,若" 00.00 " + 9.365 -> 09.37

Environment

Myeclipse-Pro-2014-JDK1.7

(记:蓝桥java个人环境为 Eclipse-jdk1.6)


### 实现进度动画的循环执行 为了实现进度动画的循环执行,需要对 `on_progress_timer` 和 `start_progress_animation` 函数进行修改。当前代码仅在达到目标值后移除了定时器,无法重复执行动画。通过调整逻辑,可以实现动画在完成一次运行后重新开始。 #### 修改 `on_progress_timer` 将原本在达到目标值后直接返回 `RET_REMOVE` 的逻辑改为重置当前值并继续执行动画。这样,每次到达目标值时不会终止定时器,而是重新从起始值开始递增。 ```c static ret_t on_progress_timer(const timer_info_t* info) { animation_data_t* data = (animation_data_t*)info->ctx; widget_t* progress_circle = data->progress_circle; if (data->current_value >= data->target_value) { // 重置为起始值以重新开始动画 data->current_value = data->target_value; // 确保显示最终值 data->target_value = data->start_value; // 切换目标值为起始值 data->step = -data->step; // 反向更新步长 } data->current_value += data->step; widget_set_value(progress_circle, data->current_value); rect_t r = rect_init(progress_circle->x, progress_circle->y, progress_circle->w, progress_circle->h); widget_invalidate(progress_circle, &r); // 局部刷新 return RET_REPEAT; } ``` #### 修改 `start_progress_animation` 在启动函数中新增一个参数用于设置起始值,并初始化反向步长,以便动画能够在正向和反向之间切换。 ```c void start_progress_animation(widget_t* progress_circle, int start, int end, uint32_t duration) { animation_data_t* data = &anim_data; data->progress_circle = progress_circle; data->start_value = start; data->current_value = start; data->target_value = end; data->step = (end - start) / (duration / 30); // 每30ms更新一次 timer_id = timer_add(on_progress_timer, data, 30); } ``` 通过上述修改,进度动画将在每次达到目标值后自动反转方向,从而形成连续循环的效果。如果希望动画单次执行后再重新开始,则可以通过额外的条件判断来控制动画的重启机制。 #### 示例:动画单次完成后重启 如果需要动画单次执行后再重新开始,可以在 `on_progress_timer` 中添加重启标志,并在适当条件下触发重启: ```c if (data->current_value >= data->target_value) { data->current_value = data->start_value; data->target_value = data->original_target; // 原始目标值 data->step = data->original_step; // 原始步长 } ``` 此方法允许动画在单次执行结束后重新开始,实现无限循环效果。
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值