Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/backbone.js/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子字符串在这种情况下不起作用?_Java - Fatal编程技术网

为什么java子字符串在这种情况下不起作用?

为什么java子字符串在这种情况下不起作用?,java,Java,我编写了一个代码,其中java代码在不同变量中选择小数点前的数字,在不同变量中选择小数点后的数字。例如,在下面的代码中,我们现在有23.256,我编写的代码将在firstDigit变量中选择23,在lastDigit变量中选择.256。现在问题来了,当小数点后并没有数字时,例如,若我们有23,这将崩溃 我写的是(这很有效) 它不起作用 totalAmount = 23; String totalAmountString = new BigDecimal(String.valueOf(totalA

我编写了一个代码,其中java代码在不同变量中选择小数点前的数字,在不同变量中选择小数点后的数字。例如,在下面的代码中,我们现在有23.256,我编写的代码将在
firstDigit
变量中选择23,在
lastDigit
变量中选择.256。现在问题来了,当小数点后并没有数字时,例如,若我们有23,这将崩溃

我写的是(这很有效)

它不起作用

totalAmount = 23;
String totalAmountString = new BigDecimal(String.valueOf(totalAmount )).toString();
String firstDigit= totalAmountString .substring( 0,totalAmountString .indexOf('.'));
String lastDigit= totalAmountString .substring( totalAmountString .indexOf('.'), totalAmountString .length());
totalAmount将由用户提供,所以我们不知道小数点后是否有数字。当用户输入小数点后没有任何数字的总额时,代码崩溃


任何帮助都将不胜感激:)

您需要首先检查索引是否为
-1
,这意味着没有找到小数点

int idx = totalAmountString .indexOf('.');
String firstDigit=  idx != -1 ? totalAmountString .substring( 0, idx): totalAmountString;
String lastDigit= idx != -1 ? totalAmountString .substring(idx, getAcreIntoString.length()): "";

您可以使用String类的split方法

   String totAmountStr = new BigDecimal(String.valueOf(23.256)).toString();
    String[] split = totAmountStr.split("\\.");
    String firstDigit= null;
    String lastDigit= null;;
    if (split.length > 1) {
         firstDigit = split[0];
         lastDigit = split[1];
    } else {
         firstDigit = split[0];
    }

下面的代码适用于我

double totalAmount = 23.256;
String totalAmountInString = String.valueOf(totalAmount).toString();
//Checks wether the totalAmount has value after decimal     
if (totalAmount % 1 != 0)
{
     //totalAmount has value after decimal
     String firstDigit = totalAmountInString.substring( 0,totalAmountInString .indexOf('.'));
     String lastDigit= totalAmountInString.substring( totalAmountInString.indexOf('.'), totalAmountInString.length());
     System.out.println("Before Decimal : " + firstDigit);
     System.out.println("After Decimal : " + lastDigit);
}
else
{
     //totalAmount has no value after decimal
     System.out.println(totalAmountInString + " Has no decimal");
}

祝你好运

它将返回
-1
,例如,如果用户输入25,则应仅给出25,如果为25.235,则应在一个变量中给出25,在另一个变量中给出.235-1不适用。您需要检查字符串中是否存在小数点。之后,您可以继续使用
substring()
。我该怎么做?您可以使用
contains('.')
我对java非常陌生。我刚开始学习。所以你能分享一下代码吗,因为我不知道如何使用它??如果我按原样使用,请在这里检查我为你做的答案。它正在工作,但是我如何将它与我的上述代码一起使用呢。我是java新手,所以对java不太了解。你能告诉我如何使用上面的代码吗?你想用firstDigit和lastDigit做什么。在迭代结束时,您将获得firstDigit和lastDigit的值。我已经编辑了我的答案,看看这对您是否有意义。这不是结束程序将进一步获取这些值,并在哪里进行另一次计算。它将再次检查是否有十进制。@user45154754514656210共享您想要放入这段代码的完整代码。请使用我上面给出的代码向我提供代码,因为我对java非常陌生,所以我不知道如何使用它?因为我使用java switch,所以我不知道如何在java switch中使用if-else。你可以使用上面的代码,而不是问题中引用的代码。你问了一个问题,有人提供了一个可行的解决方案。为什么您希望它完全适合上面的代码(不工作)?如果你不知道如何使用If/else,那么我可能会学习它,因为它不是火箭科学。如果你需要这个作为作业的解决方案。。。好吧,这不是这个平台的目的。@Seb好吧,我学习了它,并尝试了上述解决方案。但问题是我们不能在if-else中定义的if-else之外使用变量。我还尝试在if-else外部定义同名的空变量,然后在if-else内部更新它们,这也不起作用。这就是为什么我要求他提供一些详细的代码。
double totalAmount = 23.256;
String totalAmountInString = String.valueOf(totalAmount).toString();
//Checks wether the totalAmount has value after decimal     
if (totalAmount % 1 != 0)
{
     //totalAmount has value after decimal
     String firstDigit = totalAmountInString.substring( 0,totalAmountInString .indexOf('.'));
     String lastDigit= totalAmountInString.substring( totalAmountInString.indexOf('.'), totalAmountInString.length());
     System.out.println("Before Decimal : " + firstDigit);
     System.out.println("After Decimal : " + lastDigit);
}
else
{
     //totalAmount has no value after decimal
     System.out.println(totalAmountInString + " Has no decimal");
}