Math.Round到每个其他int而不是每个int

时间:2018-01-24 20:37:35

标签: c# math

此方法将每个值四舍五入为int:

transform.position = new Vector2(Mathf.Round(_mousePos.x), Mathf.Round(_mousePos.y));

如何将其四舍五入到每个偶数?即:

3.2f > 4
2.8f > 2
1.2f > 2
0.8f > 0
4.4f > 4

我想一种看待它的方法是四舍五入到最近的偶数。

2 个答案:

答案 0 :(得分:3)

这么简单吗?

private int round_to_even(float input)
{
return Mathf.Round(input / 2.0) * 2;
}

示例:

round_to_even(3.2);
==> Mathf.Round(1.6) * 2; 
==> 2.0 * 2;
==> 4;   // Final Answer.

答案 1 :(得分:0)

你是正确的Mathf.Round和Math.Round表现相同。

https://msdn.microsoft.com/en-us/library/ef48waz8(v=vs.110).aspx https://docs.unity3d.com/ScriptReference/Mathf.Round.html

在一些问题评论中提到的中点舍入仅与精确到.5的小数有关 - 它们将转到偶数整数。其他四舍五入完全按预期完成;向上或向下到最接近的整数。

你需要自己的Round方法。您可能需要稍微修改语法,但尝试这样的事情:

button

}

我使用float是因为圆形的Mathf定义使用了它,可能或可能不适合您的目的,但您会得到一般的想法。

public class CardViewActivity extends AppCompatActivity {

private ImageView cardArtImageView;
private TextView leaderSkillDescText;
private TextView superAttackTitleText;
private TextView superAttackDescText;
private TextView passiveSkillTitleText;
private TextView passiveSkillDescText;
private TextView hpText;
private TextView attText;
private TextView defText;
private TextView costText;
private Button arrowButton;

private int selectedItemPosition;
private boolean isBtnClicked = false;

@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.cardview_refined);

    // Retrieving the data sent over from MainActivity
    Intent intent = getIntent();
    Bundle bundle = intent.getExtras();

    if (bundle != null) {
        selectedItemPosition = bundle.getInt("Card Index");
    }
    //Toast.makeText(this, "WIDTH: " + SCREEN_WIDTH, Toast.LENGTH_SHORT).show();

    // Initializing our views
    cardArtImageView = findViewById(R.id.cardArtImageView);
    viewDefinitions(false);
    setSelectedViewsInit();

    initCardViewData(selectedItemPosition);

    arrowButton.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View view) {
            isBtnClicked = !isBtnClicked;
            if (isBtnClicked) {
                setContentView(R.layout.cardview_expand_details);
                viewDefinitions(true);
                initCardViewData(selectedItemPosition);
                setSelectedViewsInit();
                Log.d("BTN", "Btn Clicked 1st time");
                arrowButton.setOnClickListener(new View.OnClickListener() {
                    @Override
                    public void onClick(View view) {
                        setContentView(R.layout.cardview_refined);
                        cardArtImageView = findViewById(R.id.cardArtImageView);
                        viewDefinitions(false);
                        initCardViewData(selectedItemPosition);
                        setSelectedViewsInit();
                        isBtnClicked = !isBtnClicked;
                        Log.d("BTN", "Btn Clicked 2nd time");
                    }
                });
            }
        }
    });
}

/**
 * Sets the required textViews as selected to allow automatic scrolling
 */
private void setSelectedViewsInit() {
    leaderSkillDescText.setSelected(true);
    superAttackTitleText.setSelected(true);
    superAttackDescText.setSelected(true);
    if (passiveSkillTitleText != null && passiveSkillDescText != null) {
        passiveSkillTitleText.setSelected(true);
        passiveSkillDescText.setSelected(true);
    }
}

/**
 * Adds the views's definitions
 *
 * @param initPassiveInfo used to decide whether or not the passiveSkillDesc & ..Title != null
 *                        so that they can be defined
 */
private void viewDefinitions(boolean initPassiveInfo) {
    leaderSkillDescText = findViewById(R.id.leaderSkillDesc);
    superAttackTitleText = findViewById(R.id.superAttackTitle);
    superAttackDescText = findViewById(R.id.superAttackDesc);
    if (initPassiveInfo) {
        passiveSkillTitleText = findViewById(R.id.passiveSkillTitle);
        passiveSkillDescText = findViewById(R.id.passiveSkillDesc);
    } else {
        Log.d("Definitions", "Passive info == null");
    }
    hpText = findViewById(R.id.HP);
    attText = findViewById(R.id.ATT);
    defText = findViewById(R.id.DEF);
    costText = findViewById(R.id.COST);
    arrowButton = findViewById(R.id.arrowButton);
}

/**
 * Initialize the cardViewActivity's views with the data from the CardInfoDatabase.java class
 *
 * @param selectedItemPosition Used to initialize this activity's views if the intent was called from the MainScreen Fragment
 */
private void initCardViewData(int selectedItemPosition) {
    if (cardArtImageView != null) {
        cardArtImageView.setImageResource(CardInfoDatabase.cardArts[selectedItemPosition]);
    }
    leaderSkillDescText.setText(CardInfoDatabase.leaderSkills[selectedItemPosition]);
    superAttackTitleText.setText(CardInfoDatabase.superAttacksName[selectedItemPosition]);
    superAttackDescText.setText(CardInfoDatabase.superAttacksDesc[selectedItemPosition]);
    if (passiveSkillTitleText != null && passiveSkillDescText != null) {
        passiveSkillTitleText.setText(CardInfoDatabase.passiveSkillsName[selectedItemPosition]);
        passiveSkillDescText.setText(CardInfoDatabase.passiveSkillsDesc[selectedItemPosition]);
    }
    hpText.setText(CardInfoDatabase.hp[selectedItemPosition].toString());
    attText.setText(CardInfoDatabase.att[selectedItemPosition].toString());
    defText.setText(CardInfoDatabase.def[selectedItemPosition].toString());
    costText.setText(CardInfoDatabase.cost[selectedItemPosition].toString());
}
}

短得多,但行为有些不一致。 3和5都将舍入到4,7和9将舍入到8,等等。这是由于Mathf.Round()的中点舍入。如果您的应用程序可以使用,那么这是一个非常简洁的解决方案。