[英]Adding integer and double in java
我正在學校從事 JavaFX 項目,目前我遇到了一個問題。 我想添加在 class 中定義的一些數字的總和(參見 class Add),它們既有雙精度又有 integer。 目前我的代碼沒有編譯。
public class Add {
private double numdob;
private int numint;
public void setNumdob(double numdob) {
this.numdob = numdob;
}
public void setNumint(int numint) {
this.numint = numint;
}
public double getNumdob() {
return numdob;
}
public double getNumint() {
return numint;
}
public double calculateSum() {
double numdob = 10.0*getNumdob();
int numint = (int) (3.31*getNumint());
double total = numdob + numint;
return total;
}
}
我正在嘗試在控制器(javaFX)中使用該方法,我已經實現了這樣的方法:(我已經初始化並定義了上面的 class)
private Add add;
@FXML
public void initialize() {
add = new Add();
@FXML
public void calculate() {
try {
double numdob = Double.parseDouble(double.getText());
int numint = Integer.parseInt(integer.getText());
add.setNumdob(numdob);
add.setNumint(numint);
double totalSum = add.calculateSum();
output.setText("The sum is " + totalSum);
} catch (Exception e) {
outputCustoms.setText( e.getMessage());
}
}
您沒有聲明(或向我們展示?)變量,例如integer
或output
。
另一個小問題是這樣的:
public double getNumint() {
return numint;
}
... 應該返回int
而不是 double。
我修改了你的代碼。 我的更改包括:
Add
尚不清楚。 鑒於您對問題域的了解,我希望您可以使用 devise 比我的CalcPair
更好的名稱。CalcPair
就像調用 setter 和重新計算一樣簡單和容易——所以可變是沒有意義的。Math.toIntExact( long value )
的調用,以檢測您的結果是否不適合 32 位int
值。 在轉換為int
long
d
附加到文字以明確它們的類型是double
。package work.basil.demo.math;
import java.util.Objects;
public final class CalcPair
{
// Member fields.
private final double numdob;
private final int numint;
private final double result;
// Constructors.
public CalcPair ( final double numdob , final int numint )
{
this.numdob = numdob;
this.numint = numint;
// Calculate result
double x = ( 10.0d * this.numdob );
int y = Math.toIntExact( ( long ) ( 3.31d * this.numint ) ); // Truncate `double` fractional to a `long` integer, then fit to an `int`. The `Math.toIntExact` call throws exception if beyond the bounds of `int` type.
this.result = ( x + y );
}
// Getters.
public double numdob ( ) { return numdob; }
public int numint ( ) { return numint; }
public double result ( ) { return this.result; }
// `Object` overrides.
@Override
public boolean equals ( final Object o )
{
if ( this == o ) return true;
if ( o == null || getClass() != o.getClass() ) return false;
CalcPair calcPair = ( CalcPair ) o;
return Double.compare( calcPair.numdob , numdob ) == 0 && numint == calcPair.numint;
}
@Override
public int hashCode ( )
{
return Objects.hash( numdob , numint );
}
@Override
public String toString ( )
{
return "CalcPair{ " +
"numdob=" + numdob +
" | numint=" + numint +
" | result=" + result +
" }";
}
}
用法。
double numdob = Double.parseDouble( "7" );
int numint = Integer.parseInt( "42" );
CalcPair calcPair = new CalcPair( numdob , numint );
double result = calcPair.result();
System.out.println( "result = " + result );
結果 = 209.0
順便說一句,要了解浮點技術會犧牲准確性來換取執行速度。 如果您關心准確性,請使用BigDecimal
而不是 float/Float/double/Double 類型。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.