簡體   English   中英

使用jscience將體積(加侖)轉換為質量(克)?

[英]Converting volume (gallons) to mass (grams) using jscience?

我似乎找不到/記住一個將體積單位轉換為質量單位的特定公式。 我認為這與密度有關,但是該怎么做呢?

就我而言,我正在嘗試使用JScience庫編寫程序,以將用戶可能輸入的任何類型的單位轉換為標准SI.GRAM單位。

問題在於嘗試描述像蜂蜜這樣的東西,通常以加侖,克,磅和盎司為單位。

我的以下代碼大部分在使用質量單位時有效,但是在嘗試使用加侖時會出現ConversionException ,這是可以理解的,因為它測量的是體積而不是質量。

javax.measure.converter.ConversionException: gal is not compatible with g

這是到目前為止我得到的。 另外,我選擇將Amount<Mass>分解為amount_valueamount_unit因為我想將其存儲在SQLite數據庫中並且也將其表示為文本,因此我將其存儲為序列化。

public class Sugar {

    private String type;
    private double amount_value;
    private String amount_unit;


    public Sugar(SUGAR_TYPES type, Amount<Mass> amount) {
        this.type = type.toString();
        this.amount_value = amount.getEstimatedValue();
        this.amount_unit = amount.getUnit().toString();
    }    

    public Amount<Mass> getAmount() {
        BaseUnit<Mass> mass_unit = new BaseUnit<>(amount_unit);
        return Amount.valueOf(amount_value, mass_unit);     
    }

    public SUGAR_TYPES getType() {
         return (type != null) ? SUGAR_TYPES.valueOf(type) : null;
    }

    public double getAmountInGrams() {
        Amount<Mass> mass_unit = getAmount();
        switch (mass_unit.getUnit().toString().toLowerCase()) {
            case "g":
                return mass_unit.getEstimatedValue();
            case "gal":
                // this throws the ConversionException
                return NonSI.GALLON_LIQUID_US.getConverterTo(SI.GRAM).convert(mass_unit.getEstimatedValue());
            case "lb":
                return NonSI.POUND.getConverterTo(SI.GRAM).convert(mass_unit.getEstimatedValue());
            default:
                Log.e(TAG, String.format("Failed to get Amount<Mass> in SI.GRAM for amount %s and unit %s.",
                        amount_value, amount_unit));
                throw new IllegalArgumentException(mass_unit.getUnit().toString());
        }
    }

    public enum SUGAR_TYPES {
        HONEY, SUCROSE, APPLES, APRICOTS, APRICOTS_DRIED, BANANAS, BLACKBERRY, BLUEBERRY,
        BOYSENBERRY, CANTALOUPE, CELERY, CHERRY_DARK_SWEET, CRANBERRY, CURRANT_BLACK, DATES, 
        DATES_DRIED, DEWBERRY, ELDERBERRY, FIGS, FIGS_DRIED, GOOSEBERRY, GRAPE_CONCORD,
        GRAPES, GRAPEFRUIT, GUANABANA, GUAVAS, HONEYDEW_MELON, JACKFRUIT, KIWIS, LEMON_JUICE,
        LITCHI, LOGANBERRY, MANGOS, MAPLE_SYRUP, PLUMS, RAISINS_DRIED, RASPBERRY_BLACK,
        RASPBERRY_RED, RHUBARB, STRAWBERRY, TANGERINES, WATERMELONS
    }
}

有更好的方法嗎? 我還有其他類需要采用類似的方式將通用單位轉換為SI單位。

您將需要所有要計算的質量/體積值。 例如,您可以將枚舉擴展為每升包含1克(或每m ^ 3千克,最適合您的)。 沒有這些信息,您不能僅將體積轉換為重量:

例如:1升水= 1千克,但1升汽油= 0.88千克。

然后,您只需要將輸入量轉換為默認量,查找類型,將轉換后的量乘以每升保存的克數即可返回結果。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM