【发布时间】:2017-09-14 22:30:13
【问题描述】:
我似乎找不到/记得将体积单位转换为质量单位的特定公式。我认为这与密度有关,但如何做到这一点?
就我而言,我正在尝试使用JScience library 编写一个程序,以将用户可能输入的任何类型的单位转换为标准的SI.GRAM 单位。
问题在于试图描述蜂蜜之类的东西,通常以加仑、克、磅和盎司为单位。
我的以下代码主要在使用质量单位时工作,但在尝试使用加仑时我得到 ConversionException,这是可以理解的,因为它测量的是体积而不是质量。
javax.measure.converter.ConversionException: gal is not compatible with g
这是我到目前为止所得到的。另外,我选择将Amount<Mass> 分解为amount_value 和amount_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 单位。
【问题讨论】:
-
density = mass / volume。如果你不记得了,想想单位:kg/m^3- 从字面上看,质量超过体积。 -
对,但是除了有一个密度查找表并自己进行转换之外,有没有一种很好/标准的方法来处理蜂蜜和果汁等常见物品?
-
体积和质量的定义要求您知道特定材料的密度。如果您想避免查找表,您将需要生活在不同的现实中。
-
嗯,1 cm^3 的水是 1 克。
-
谢谢大家,真不敢相信我忘记了体积的公式,我想我只需要制作密度查找表就可以做到这一点。
标签: java units-of-measurement jscience