Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/opengl/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 使用jscience将体积(加仑)转换为质量(克)?_Java_Units Of Measurement_Jscience - Fatal编程技术网

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

Java 使用jscience将体积(加仑)转换为质量(克)?,java,units-of-measurement,jscience,Java,Units Of Measurement,Jscience,我似乎找不到/记不起将体积单位转换成质量单位的具体公式。我认为这与密度有关,但如何做到这一点呢 在我的例子中,我试图使用编写一个程序,以将用户可能输入的任何类型的单位转换为标准的SI.GRAM单位 问题出在试图描述蜂蜜之类的东西时,通常用加仑、克、磅和盎司来衡量 我有以下代码,主要是在使用质量单位时使用的,但在使用加仑时,我会得到一个转换异常,这是可以理解的,因为它是测量体积而不是质量 javax.measure.converter.ConversionException: gal is not

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

在我的例子中,我试图使用编写一个程序,以将用户可能输入的任何类型的单位转换为标准的
SI.GRAM
单位

问题出在试图描述蜂蜜之类的东西时,通常用加仑、克、磅和盎司来衡量

我有以下代码,主要是在使用质量单位时使用的,但在使用加仑时,我会得到一个
转换异常
,这是可以理解的,因为它是测量体积而不是质量

javax.measure.converter.ConversionException: gal is not compatible with g
这是我到目前为止得到的。另外,我选择将
Amount
分解为
Amount\u值
Amount\u单位
,因为我希望将其存储在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
    }
}
公共类糖{
私有字符串类型;
私人双倍金额;
专用字符串金额单位;
公共糖(糖类型、数量){
this.type=type.toString();
this.amount_value=amount.getEstimatedValue();
this.amount_unit=amount.getUnit().toString();
}    
公共金额getAmount(){
基本单位质量单位=新的基本单位(数量单位);
返回金额.valueOf(金额\值,质量\单位);
}
公共类型getType(){
return(type!=null)?SUGAR_类型。valueOf(type):null;
}
公共双getAmountInGrams(){
数量质量单位=getAmount();
开关(mass_unit.getUnit().toString().toLowerCase()){
案例“g”:
返回质量单位。getEstimatedValue();
案例“gal”:
//这将抛出ConversionException
将非SI.galler\u LIQUID\u US.getConverterTo(SI.GRAM).convert(质量单位:getEstimatedValue())返回;
案例“lb”:
返回NonSI.POUND.getConverterTo(SI.GRAM.convert(mass_unit.getEstimatedValue());
违约:
Log.e(标记,字符串格式(“无法获取金额%s和单位%s的SI.GRAM金额”),
金额(价值、金额(单位));
抛出新的IllegalArgumentException(mass_unit.getUnit().toString());
}
}
公共枚举类型{
蜂蜜、蔗糖、苹果、杏子、杏干、香蕉、黑莓、蓝莓、,
波森莓、哈密瓜、芹菜、樱桃、黑樱桃、红莓、黑醋栗、枣、,
枣干、杜莓、接骨木、无花果、无花果干、醋栗、葡萄、,
葡萄、葡萄柚、瓜纳巴纳、番石榴、蜜瓜、菠萝蜜、猕猴桃、柠檬汁、,
荔枝、罗根莓、芒果、枫树糖浆、李子、葡萄干、覆盆子黑、,
覆盆子红、大黄、草莓、橘子、西瓜
}
}

有更好的方法吗?我还有其他类,它们需要类似的方法将通用单位转换为国际单位制。

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

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


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

密度=质量/体积
。如果你记不起来了,想想单位:
kg/m^3
——字面意思是质量大于体积。是的,但是有没有一种好的/标准的方法来处理蜂蜜和果汁等常见物品,除了有一个密度查找表和自己进行转换外,体积和质量的定义要求你知道特定材料的密度。如果你想避免查阅表格,你需要生活在一个不同的现实中。嗯,1厘米3的水等于1克。谢谢各位,真不敢相信我忘记了体积的公式,我想我只需要制作密度查阅表格就可以了。