Software systems intensively interact with other software/hardware systems, devices and users. The operation environment of software becomes unstable and software requirements may also change. Due to the fact that it is hard to predict the environment and requirements at runtime, their changes become uncertain. For providing continuous service, software systems need to adjust themselves according to changes in the environment and themselves. Uncertainties bring great challenges to the adaptation process. Existing related efforts either target at modeling the effects on requirements caused by environmental changes, or focus on how to adjust software behaviors to satisfy fixed requirements under changing environment. With these approaches, it is difficult to deal with the variability and complexity in the adaptation process when requirements are uncertain. This paper proposes a fuzzy control based adaptation decision-making approach, to tackling environment and requirements uncertainties at runtime. It applies fuzzy logic to model and specify variables existing in the environment and software, and generates reasoning rules between variables; designs the adaptation mechanism based on the feedforward-feedback control structure and fuzzy controllers; implements decision-making through fuzzy inference and genetic algorithm. The adaptation results under different environment and constraints show that software can achieve the optimal decision with the adaptation mechanism and algorithms. The feasibility and effectiveness of the approach are illustrated through a mobile bitcoin-miner system.