如何使用Java将字符串逐个字符转换为浮点字符?
不久前我在一次采访中被问到这个问题,但我想不出来。我不被允许一次投下整部电影,所以我的下一个想法是,在这一点上,我只需要通过转换字符串,但采访我的人告诉我,他想这样做:如何使用Java将字符串逐个字符转换为浮点字符?,java,string,casting,character,floating-point-conversion,Java,String,Casting,Character,Floating Point Conversion,不久前我在一次采访中被问到这个问题,但我想不出来。我不被允许一次投下整部电影,所以我的下一个想法是,在这一点上,我只需要通过转换字符串,但采访我的人告诉我,他想这样做: 1 = 1 12 = 1 * 10 + 2 123 = 12 * 10 + 3 1234 = 123 * 10 + 4 输入是将“1234.567”转换为浮点值,即1234.567 老实说,我不知道他打算怎么做,我也没能产生足够好的代码来向大家展示我所拥有的只是循环解析每个字符的能力: for(int i = 0; i
1 = 1
12 = 1 * 10 + 2
123 = 12 * 10 + 3
1234 = 123 * 10 + 4
输入是将“1234.567”转换为浮点值,即1234.567
老实说,我不知道他打算怎么做,我也没能产生足够好的代码来向大家展示我所拥有的只是循环解析每个字符的能力:
for(int i = 0; i < str.length(); i++){
if(!str.charAt(i).equals(".")){
fp = Float.parseFloat("" + str.charAt(i));
for(int i=0;i
我不明白你的意思是什么?你的意思是将像“123456”这样的整数转换为“12345*10+6”,如果你想这样做,只需使用“substring”方法就可以了。类似的内容(注:无错误检查):
更多细节。这不是特别优雅,但确实有效
String s = "1234.567";
Float fp = 0f;
Float fpd = 0f;
int i =0;
while(s.charAt(i) != '.') {
fp = (fp * 10) + Float.parseFloat(s.substring(i, (i+1)));
i++;
}
int d = s.indexOf('.');
for(i = s.length()- 1; i > d; i--) {
fpd = (fpd * 0.1f) + (Float.parseFloat(s.substring(i, (i+1))) * 0.1f);
}
fp += fpd;
System.out.println(fp);
要将字符串转换为浮点,我个人使用以下方法:
Float.parseFloat("1234.567");
为了他想要的,这就是我的方式:
String num = "1234.567";
int dotLocation = num.indexOf(".");
int wholeNum = Integer.parseInt(num.substring(0, dotLocation));
String answer = (wholeNum / 10) + " * 10 + " + (wholeNum % 10);
找到字符串中“.”的位置,然后通过获取原始字符串的子字符串来提取整数。这将为我们提供1234
现在我们需要格式化它,这样我们就可以得到1234=123*10+4
从数学上讲,当你将1234除以10时,商将是123,余数将是4。这将为你提供他想要的答案。你需要修剪源字符串,然后一次创建一个数字,同时计算在可选小数点后出现的数字(因此可以缩放结果数字)
公共类MakeFloat{
私密的静电使我漂浮;
/**
*@param args
*/
公共静态void main(字符串[]args){
//TODO自动生成的方法存根
me=新的MakeFloat();
字符串source=“1234.567”;
浮点结果=me.start(源);
System.out.println(“+source+”=“+result”);
}
专用浮点开始(字符串){
最后的字符串数字=“0123456789”;
最终浮点[]值={0,1,2,3,4,5,6,7,8,9};
浮动10=10;
浮动结果=0;
浮标=1;
布尔值isAfterDecimal=false;
String stepThrough=String.trim();
对于(int i=0;i-1){
结果=十个*结果+值[loc];
如果(isAfterDecimal){
比例=比例*10;
}
}如果(“.”等于(数字)){
如果(isAfterDecimal){
//处理错误
}否则{
isAfterDecimal=true;
}
}否则{
//处理坏性格
}
}
返回结果/刻度;
}
}
package com.nanofaroque.float2String
公共类Float2String{
public static void main(String[] args) {
String input="1234.56";
String str=".";
float result=0;
int j=3;//this is used for multiply by 10^j
for(int i=0;i<input.length();i++){
if (input.charAt(i)!=str.charAt(0)){
char m=input.charAt(i);//Convert String to Character
float x=(float) input.charAt(i);//Getting the ASCI value
x=x-48;//Now x converted to the real float value
float y=(float) (x* (Math.pow(10, j)));//Multiplication Operation for conversion
result=result+y;
j=j-1;
}
else{
System.out.println("Welcome to my World");// to make the loop work..You can change it if you want
}
}
System.out.println("Result after the conversion:"+result);
}
publicstaticvoidmain(字符串[]args){
字符串输入=“1234.56”;
字符串str=“.”;
浮动结果=0;
int j=3;//用于乘以10^j
对于(int i=0;i wait——在您的示例输入中根本没有浮点。很抱歉我错过了它。现在添加它。提示:您可以通过int i=c-'0'
将数字char
转换为int
。其余的内容与他的解释基本一致,但转换为代码请注意,您的代码中有一个错误:!str.charAt(i).equals(“))
String num = "1234.567";
int dotLocation = num.indexOf(".");
int wholeNum = Integer.parseInt(num.substring(0, dotLocation));
String answer = (wholeNum / 10) + " * 10 + " + (wholeNum % 10);
public class MakeFloat {
private static MakeFloat me;
/**
* @param args
*/
public static void main(String[] args) {
// TODO Auto-generated method stub
me = new MakeFloat();
String source = " 1234.567";
float result = me.start(source);
System.out.println(" " + source + "=" + result);
}
private float start(String string) {
final String digits = "0123456789";
final float[] values = {0,1,2,3,4,5,6,7,8,9};
float ten = 10;
float result = 0;
float scale = 1;
boolean isAfterDecimal = false;
String stepThrough = string.trim();
for (int i = 0; i < stepThrough.length(); i++) {
// see if we have a digit or a decimal point
String digit = stepThrough.substring(i, i + 1);
int loc = digits.indexOf(digit);
if (loc > -1) {
result = ten * result + values[loc];
if (isAfterDecimal) {
scale = scale * ten;
}
} else if (".".equals(digit)) {
if (isAfterDecimal) {
// handle error
} else {
isAfterDecimal = true;
}
} else {
// handle bad character
}
}
return result / scale;
}
}
public static void main(String[] args) {
String input="1234.56";
String str=".";
float result=0;
int j=3;//this is used for multiply by 10^j
for(int i=0;i<input.length();i++){
if (input.charAt(i)!=str.charAt(0)){
char m=input.charAt(i);//Convert String to Character
float x=(float) input.charAt(i);//Getting the ASCI value
x=x-48;//Now x converted to the real float value
float y=(float) (x* (Math.pow(10, j)));//Multiplication Operation for conversion
result=result+y;
j=j-1;
}
else{
System.out.println("Welcome to my World");// to make the loop work..You can change it if you want
}
}
System.out.println("Result after the conversion:"+result);
}