Java 将具有1位十进制数字的双精度数字转换为2位数字
我需要用这个值作为价格。因此,如果用户写入25,我希望加载到数据库25.00,如果用户写入25.1,则应为25.10。 我不知道怎么做…实际上我就是这么做的:Java 将具有1位十进制数字的双精度数字转换为2位数字,java,android,firebase,Java,Android,Firebase,我需要用这个值作为价格。因此,如果用户写入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(description
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
EditText-cost=findviewbyd(R.id.cost\u-single);
//带有编辑文本值的临时变量
字符串costTemp=cost.getText().toString();
如果(descriptionPayment.length()>0&&costTemp.length()>0){
costPayment=Double.parseDouble(costTemp);
Map payment=newhashmap();
付款。卖出(“成本”,成本付款);
付款。认沽期权(“付款人”,payedByText);
db.集合(“用户”).文档(电子邮件).集合(“组”).文档(组名)
.收款(“付款”).文件(说明付款)
.set(付款)
//我剩下的代码
即使成本值在点后没有任何数字,我如何上传小数点后两位的双精度值?tl;dr
25.10
BigDecimal
如果您想要精确表示小数点,请使用BigDecimal
类。对于金钱问题,请始终使用BigDecimal
BigDecimal bd = new BigDecimal( "25.1" ) ;
浮点数
如果您想以精度换取更快的执行速度,请使用float
/float
(32位)或double
/double
。这些都使用技术。因此,千万不要将其用于金钱或其他精度比性能更重要的环境
串
无论如何,记住你的基本数学。25.1和25.10在逻辑上是相同的数字
所以你真正想问的是“我如何生成文本,用小数点后的两位数来表示我的数字?”
对于浮点类型,请使用类
请参阅此代码
25.10
您还可以进行本地化。在美国等国家,小数点分隔符使用句号,而逗号则使用。有关详细信息,请搜索堆栈溢出,如前所述
生成表示BigDecimal
值的字符串的类似方法
BigDecimal bd = new BigDecimal( "25.1" ) ;
DecimalFormat formatterBd = new DecimalFormat( "##.00" );
String outputBd = formatterBd.format( bd ) ;
请参阅此代码
25.10
四舍五入
另一个相关问题是,如果数字中的小数位数超过了要打印的位数,则舍入。搜索堆栈溢出,因为这已被多次解决
关于IdeOne.com
关于上面在IdeOne.com上运行代码的链接,该站点中的JVM被操纵为仅使用一个区域设置,locale.US
。尝试指定其他区域设置失败。因此您无法在那里练习上述本地化。tl;dr
25.10
BigDecimal
如果您想要精确表示小数点,请使用BigDecimal
类。对于金钱问题,请始终使用BigDecimal
BigDecimal bd = new BigDecimal( "25.1" ) ;
浮点数
如果您想以精度换取更快的执行速度,请使用float
/float
(32位)或double
/double
。这些都使用技术。因此,千万不要将其用于金钱或其他精度比性能更重要的环境
串
无论如何,记住你的基本数学。25.1和25.10在逻辑上是相同的数字
所以你真正想问的是“我如何生成文本,用小数点后的两位数来表示我的数字?”
对于浮点类型,请使用类
请参阅此代码
25.10
您还可以进行本地化。在美国等国家,小数点分隔符使用句号,而逗号则使用。有关详细信息,请搜索堆栈溢出,如前所述
生成表示BigDecimal
值的字符串的类似方法
BigDecimal bd = new BigDecimal( "25.1" ) ;
DecimalFormat formatterBd = new DecimalFormat( "##.00" );
String outputBd = formatterBd.format( bd ) ;
请参阅此代码
25.10
四舍五入
另一个相关问题是,如果数字中的小数位数超过了要打印的位数,则舍入。搜索堆栈溢出,因为这已被多次解决
关于IdeOne.com
关于上面在IdeOne.com上运行代码的链接,该站点的JVM被操纵为仅使用一个区域设置,
locale.US
。尝试指定其他区域设置失败。因此,您无法在那里练习上述本地化。如果您可以使用大小数(如注释中所述,这是正确的做法),然后在中可以找到您要查找的示例。
大十进制文档可以在这里找到。
这一切归结为:
Bigdecimal bigdecimal = new Bigdecimal(25);
bigdecimal.setScale(2, BigDecimal.ROUND_HALF_EVEN) ;
其中,2表示应显示多少个小数,而舍入值表示在大于2的情况下如何对数字进行舍入。请查看文档,因为您可能希望使用不同的舍入值。如果您可以使用大小数(如注释中所述,这是正确的做法),然后在中可以找到您要查找的示例。 大十进制文档可以在这里找到。 这一切归结为:
Bigdecimal bigdecimal = new Bigdecimal(25);
bigdecimal.setScale(2, BigDecimal.ROUND_HALF_EVEN) ;
其中,2表示应显示多少个小数,舍入值表示在大于2的情况下如何对数字进行舍入。请检查文档,因为您可能希望使用不同的舍入值。这只是一个打印问题,如果数据库列设置为双倍,则无论您选择什么都可以绝对不能对货币值使用
double
。请使用BigDecimal
。此外,“paid”的拼写也应如此,而不是“*payed”@DavidConrad谢谢,你能给出一个示例代码吗?这只是一个打印问题,如果数据库列设置为双倍,那么无论你给它什么都可以。对于货币值,永远不要使用Double
。使用BigDecimal
。另外,“paid”的拼写是这样的,而不是“*payed”@DavidConrad谢谢你,你能给出一个示例代码吗?我写了一个更好的代码来解决链接问题,当我试图发送它时,它被标记为重复,甚至在源问题中我也无法发送我的答案!