在转换为int之前,在String中添加小数(。)

时间:2017-03-26 05:23:48

标签: java

我有条形码我正在读取java中的文本文件。我将条形码分成几部分,每一部分都意味着不同的东西。条形码的las 4位数是价格但是当我读取它是一个字符串然后我必须将它转换为int。

// this is the bar code that is in the text file
// 10009999991020162590
File myFile = new File ("data.txt");
Scanner  inFile = new Scanner (myFile);

barCode = inFile.nextLine();
departmentStore = (Integer.parseInt(barCode.substring(0,4)));
partNumber = (Integer.parseInt(barCode.substring(4,10)));
date = (Integer.parseInt(barCode.substring(10,16)));
price = (Integer.parseInt(barCode.substring(16,20))); 

/*this is the price of the las 4 digits of the bar code as you can 
see is a string first but then i have to convert it into a int so i can do math but i want 
to put a dot(.) between the 25.90 then transform to int.

*/

5 个答案:

答案 0 :(得分:1)

注意,我们在评论中都讨论过,不可能在整数变量中存储一个浮动数字。似乎你想通过在两个数字之间放一个。(点)来将数字存储在一个double中进行计算.Its不是一项艰巨的任务,只需注意代码。

.
.
.
.
String price=barCode.substring(16,20);
//get first two part of string add a . and then the last two char
price=price.substring(0,2)+"."+price.substring(2,4);
//then convert it to double
double p=Double.parseDouble(price);

还有一种简单的方法可以做到这一点。 。

int price = (Integer.parseInt(barCode.substring(16,20))); 
double p=price/100.0;

答案 1 :(得分:0)

所以我建议首先将其解析为int值,然后生成小数值。可以在字符串中放入一个十进制字符,但是当它转换为int时,它将生成NumberFormatException或Simply丢弃后十进制值。

因此,将它转换为int然后将值除以100或100.0以获得所需的输出会更好。

答案 2 :(得分:0)

如果您要输入小数,那么它不会是int您必须将其存储在floatdouble

您可以使用简单的字符串连接来完成这项简单的任务。

double price = Double.parseDouble(barCode.substring(16,18) + "." + barCode.substring(18,20)); 

答案 3 :(得分:0)

选项1(不好):

float price = (Float.parseFloat(
               barCode.substring(16,18) + "." + barCode.substring(18,20))); 

我不完全确定语言环境。 java会解析独立的语言环境设置吗?例如,在德国,正确的十进制值写为25,90而不是25.90。因此,我建议您使用更通用的方法,而不是硬编码的.

选项2(更好,imho):

float price = Float.parseFloat(String.format("%02.2f", 
             (float)(Integer.parseInt(barCode.substring(16,20))) / 100.0f));

答案 4 :(得分:0)

答案实际上取决于您在解析后要对价格变量做什么。

以下是一些选择:

  1. 您可以将条形码的最后4位数字视为便士价格

    int priceInPennies = Integer.parseInt(barCode.substring(16,20));
    
  2. 将价格保持在便士价格或将其转换为以美元计价的价格

    double priceInDollars = Double.parseDouble(barCode.substring(16,20)) / 100;
    

    double priceInDollars = priceInPennies / 100.0;  
    
  3. 如果您只需要显示价格,为什么不将价格保持为字符串

    String priceAsString = barCode.substring(16,18) + "." + barCode.substring(18,20);