java : float를 String으로, String을 Float로 변환
어떻게 하면 플로트에서 스트링 또는 스트링으로 변환할 수 있을까?
나의 경우 나는 2개의 값 문자열(표에서 얻은 값)과 내가 계산한 부동값 사이에서 주장을 해야 한다.
String valueFromTable = "25";
Float valueCalculated =25.0;
나는 처음부터 끝까지 노력했다.
String sSelectivityRate = String.valueOf(valueCalculated );
하지만 그 주장은 실패한다.
자바 클래스 사용.
float f = Float.parseFloat("25");
String s = Float.toString(25.0f);
비교를 하려면 항상 줄을 띄워 두 개의 띄어쓰기로 비교하는 것이 좋다.그 이유는 하나의 플로트 숫자에 대해 여러 문자열 표현이 있기 때문이며, 문자열과 비교할 때 다르다(예: "25" != "25.0"!= "25.00" 등).
문자열로 플로트 - String.valueOf()
float amount=100.00f;
String strAmount=String.valueOf(amount);
// or Float.toString(float)
부동할 문자열 - Float.parseFloat()
String strAmount="100.20";
float amount=Float.parseFloat(strAmount)
// or Float.valueOf(string)
다음 코드 샘플을 사용해 보십시오.
public class StringToFloat
{
public static void main (String[] args)
{
// String s = "fred"; // do this if you want an exception
String s = "100.00";
try
{
float f = Float.valueOf(s.trim()).floatValue();
System.out.println("float f = " + f);
}
catch (NumberFormatException nfe)
{
System.out.println("NumberFormatException: " + nfe.getMessage());
}
}
}
여기서 발견됨
나는 다음과 같은 코드가 도움이 될 것이라고 믿는다.
float f1 = 1.23f;
String f1Str = Float.toString(f1);
float f2 = Float.parseFloat(f1Str);
이것은 가능한 답이며, 이것은 또한 정확한 데이터를 제공할 것이다. 단지 필요한 형태의 소수점을 변경하기만 하면 된다.
공용 클래스 TestStandalone { /***이 방법은 주안점이다.
* @param args void*/공용 정적 보이드 주(String[] args) {// TODO 자동 생성 메서드 스텁{을 시험해 보다.f1=152.32f;BigDecimal 라운드 파이널 프라이스 = 새로운 BigDecimal(f1.floatValue()).setScale(2, BigDecimal).라운드_하프_업); System.out.println("f1 --> "+f1); 문자열 s1=roundfinalPrice.toPlainString();System.out.println("s1 "+s1); } 캐치(예외 e) {// TODO 자동 생성 캐치 블록e.printStackTrace();}} }
출력은
f1 --> 152.32s1 152.32
찾으시려면 소수점 두자리.. Float f = (float)12.34; String s = new DecimalFormat ("#.00").format (f);
음, 이 방법은 좋은 방법은 아니지만, 쉽고 제안되지 않는다.이게 가장 효과적이지 않은 방법이고 코딩 연습이 더 안좋은 방법이라고 말해야 할지도 모르지만, 사용하기에는 재미있고,
float val=10.0;
String str=val+"";
빈 따옴표, 변수 str에 null 문자열을 추가하고 문자열 유형에 'val'을 업캐스트하십시오.
String str = "1234.56";
float num = 0.0f;
int digits = str.length()- str.indexOf('.') - 1;
float factor = 1f;
for(int i=0;i<digits;i++) factor /= 10;
for(int i=str.length()-1;i>=0;i--){
if(str.charAt(i) == '.'){
factor = 1;
System.out.println("Reset, value="+num);
continue;
}
num += (str.charAt(i) - '0') * factor;
factor *= 10;
}
System.out.println(num);
플로트를 스트링으로 변환하는 방법은 세 가지가 있다.
- "" + f
- 플로트.toString(f)
- 문자열.valueOf(f)
문자열을 플로트로 변환하는 두 가지 방법이 있음
- Float.valueOf(str)
- 플로트.파스플로트(스트);
예:-
public class Test {
public static void main(String[] args) {
System.out.println("convert FloatToString " + convertFloatToString(34.0f));
System.out.println("convert FloatToStr Using Float Method " + convertFloatToStrUsingFloatMethod(23.0f));
System.out.println("convert FloatToStr Using String Method " + convertFloatToStrUsingFloatMethod(233.0f));
float f = Float.valueOf("23.00");
}
public static String convertFloatToString(float f) {
return "" + f;
}
public static String convertFloatToStrUsingFloatMethod(float f) {
return Float.toString(f);
}
public static String convertFloatToStrUsingStringMethod(float f) {
return String.valueOf(f);
}
}
전체 수동 경로로 이동하려면:이 방법은 숫자의 소수점을 이리저리 옮겨서 바닥(긴 길이)과 계수를 이용해 숫자를 추출해 두 개를 문자열로 변환하는 방식이다.또 염기분할별 셈을 이용해 소수점이 속하는 곳을 파악한다.또한 소수점 이후가 되면 숫자가 높은 부분을 '삭제'할 수 있어 초대형 복식으로는 정밀도가 떨어지는 것을 피할 수 있다.끝에 있는 주석 코드를 참조하십시오.내 시험에서, 그것은 자바 플로트 표현 자체보다 결코 덜 정확하지 않다. 그들이 실제로 이러한 소수점 이하를 부정확하게 보여준다.
/**
* Convert the given double to a full string representation, i.e. no scientific notation
* and always twelve digits after the decimal point.
* @param d The double to be converted
* @return A full string representation
*/
public static String fullDoubleToString(final double d) {
// treat 0 separately, it will cause problems on the below algorithm
if (d == 0) {
return "0.000000000000";
}
// find the number of digits above the decimal point
double testD = Math.abs(d);
int digitsBeforePoint = 0;
while (testD >= 1) {
// doesn't matter that this loses precision on the lower end
testD /= 10d;
++digitsBeforePoint;
}
// create the decimal digits
StringBuilder repr = new StringBuilder();
// 10^ exponent to determine divisor and current decimal place
int digitIndex = digitsBeforePoint;
double dabs = Math.abs(d);
while (digitIndex > 0) {
// Recieves digit at current power of ten (= place in decimal number)
long digit = (long)Math.floor(dabs / Math.pow(10, digitIndex-1)) % 10;
repr.append(digit);
--digitIndex;
}
// insert decimal point
if (digitIndex == 0) {
repr.append(".");
}
// remove any parts above the decimal point, they create accuracy problems
long digit = 0;
dabs -= (long)Math.floor(dabs);
// Because of inaccuracy, move to entirely new system of computing digits after decimal place.
while (digitIndex > -12) {
// Shift decimal point one step to the right
dabs *= 10d;
final var oldDigit = digit;
digit = (long)Math.floor(dabs) % 10;
repr.append(digit);
// This may avoid float inaccuracy at the very last decimal places.
// However, in practice, inaccuracy is still as high as even Java itself reports.
// dabs -= oldDigit * 10l;
--digitIndex;
}
return repr.insert(0, d < 0 ? "-" : "").toString();
}
StringBuilder는 속도에 사용되지만 이 방법은 어레이를 사용하기 위해 쉽게 다시 쓰일 수 있으므로 다른 언어에서도 사용할 수 있다는 점에 유의하십시오.
참조URL: https://stackoverflow.com/questions/7552660/java-convert-float-to-string-and-string-to-float
'Programing' 카테고리의 다른 글
vue-i18n - '알 수 없는' 토큰 유형 감지 (0) | 2022.05.14 |
---|---|
vuejs에서 재사용 가능한 api-properties 구성 요소를 구현하는 방법? (0) | 2022.05.14 |
Vue.js - Vuex 모듈에서 현재 경로 가져오기 (0) | 2022.05.14 |
C의 함수에 인수로 배열 전달 (0) | 2022.05.14 |
시작 시 NUXTJS Store 상태 콘텐츠를 채우시겠습니까? (0) | 2022.05.14 |