Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/sorting/2.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 将具有1位十进制数字的双精度数字转换为2位数字_Java_Android_Firebase - Fatal编程技术网

Java 将具有1位十进制数字的双精度数字转换为2位数字

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

我需要用这个值作为价格。因此,如果用户写入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
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谢谢你,你能给出一个示例代码吗?我写了一个更好的代码来解决链接问题,当我试图发送它时,它被标记为重复,甚至在源问题中我也无法发送我的答案!