我需要将此价格用作价格。因此,如果用户写25,我想将25.00加载到数据库,如果他写25.1,则应该为25.10。 我不知道该怎么做。实际上,这就是我要做的:
EditText cost = findViewById(R.id.cost_single);
// Temp var with the value of the Edit Text
String costTemp = cost.getText().toString();
if(descriptionPayment.length() > 0 && costTemp.length() > 0) {
costPayment= Double.parseDouble(costTemp);
Map<String, Object> payment = new HashMap<>();
payment.put("cost", costPayment);
payment.put("payed by", payedByText);
db.collection("users").document(email).collection("Group").document(groupName)
.collection("Payments").document(descriptionPayment)
.set(payment)
// rest of my code
即使成本值在点后没有任何数字,如何上传带两位小数的双精度值?
答案 0 :(得分:2)
new DecimalFormat( "##.00" )
.format(
new BigDecimal( "25.1" )
)
25.10
BigDecimal
如果要精确表示小数,请使用BigDecimal
类。始终用BigDecimal
处理金钱问题。
BigDecimal bd = new BigDecimal( "25.1" ) ;
如果要牺牲准确性来提高执行速度,请使用float
/ Float
(32位)或double
/ Double
。这些使用floating-point技术。因此,切勿将它们用于金钱或准确性比性能更重要的其他情况。
无论哪种方式,请记住您的基本数学知识。数字25.1和25.10在逻辑上是相同的数字。
因此,您真正要问的是“如何生成文本来用两位小数表示我的数字?”。
对于浮点类型,请使用DecimalFormat
类。
DecimalFormat df = new DecimalFormat( "##.00" ) ;
String output = df.format( Double.parseDouble( "25.1" ) ;
请参见此代码run live at IdeOne.com。
25.10
您也可以本地化。在some cultures(例如美国)中,将FULL STOP用作小数点分隔符,而在other places中则使用COMMA。搜索堆栈溢出以获取更多信息,因为已涵盖了该信息。
用于生成表示BigDecimal
值的字符串的类似方法。
BigDecimal bd = new BigDecimal( "25.1" ) ;
DecimalFormat formatterBd = new DecimalFormat( "##.00" );
String outputBd = formatterBd.format( bd ) ;
请参见此代码run live at IdeOne.com。
25.10
另一个相关的问题是,如果您的数字中的小数位数比要打印的位数多,则四舍五入。搜索堆栈溢出,因为已经解决了很多次。
关于上面指向IdeOne.com上运行代码的链接,该站点中的JVM被绑定为仅使用一个单一的语言环境Locale.US
。尝试指定其他语言环境失败。因此,您不能在那里进行上述本地化操作。
答案 1 :(得分:1)
如果您可以使用Big Decimal(如注释中所述,这是正确的做法),那么在this tutorial中您可以找到所需的示例。 可以在instead处找到Big Decimal文档。 归结为:
override init(nibName nibNameOrNil: String?, bundle nibBundleOrNil: Bundle?) {
historyRef = ref.child("history").childByAutoId()
}
其中2表示应该显示多少个十进制,而舍入值表示在这种情况下如果大于2则如何舍入数字。请检查文档,因为您可能想使用其他舍入值。