有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java使用jscience将体积(加仑)转换为质量(克)?

我似乎找不到/记不起将体积单位转换成质量单位的具体公式。我认为这与密度有关,但如何做到这一点呢

在我的例子中,我试图编写一个程序,使用JScience library将用户可能输入的任何类型的单元转换为标准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) 个答案

  1. # 1 楼答案

    要计算的所有内容都需要“每体积质量”值。例如,您可以将枚举扩展为每升1克(或每立方米1千克,任何最适合您的都可以)。如果没有以下信息,就不能将体积转换为重量:

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

    然后只需将输入音量转换为默认音量,查找类型,将转换后的音量乘以每升节省的克数,然后返回结果