2011-01-27 27 views
5

Tôi biết điều này đã được hỏi một vài lần trong quá khứ nhưng mọi thứ tôi cố gắng không thành công. Tôi có một bàn phím số tùy chỉnh với một nhãn UILabel. Khi tôi nhấn '1', UILabel sẽ hiển thị một cái. Bây giờ đây là những gì tôi đang cố gắng để làm:Làm cách nào để tự động chèn vị trí thập phân trên iphone?

  • Khi tôi nhấn nút '1' Tôi muốn: 0.01 trong UILabel
  • Tiếp theo là một nút '4' Tôi muốn: 0.14 trong UILabel
  • Sau đó, một '6': 1,46
  • vv, vv

Bây giờ bàn phím và UILabel đang làm việc tuyệt vời. Tôi chỉ cần làm cho số thập phân hoạt động ngay bây giờ. Bất kỳ mã mẫu nào cũng tuyệt vời, (và nơi tôi nên đặt nó trong ứng dụng của tôi). Hãy cho tôi biết nếu bạn muốn xem mã của tôi cho đến nay. Khá đơn giản. Cảm ơn mọi người!

+2

Tại sao lại là downvotes? Đây là một câu hỏi hay! –

Trả lời

4

Dưới đây là về làm thế nào tôi sẽ làm điều đó:

#define NUMBER_OF_DECIMAL_PLACES 2 
NSMutableArray *typedNumbers = ...; //this should be an ivar 
double displayedNumber = 0.0f; //this should also be an ivar 

//when the user types a number... 
int typedNumber = ...; //the number typed by the user 
[typedNumbers addObject:[NSNumber numberWithInt:typedNumber]]; 
displayedNumber *= 10.0f; 
displayedNumber += (typedNumber * 1e-NUMBER_OF_DECIMAL_PLACES); 
//show "displayedNumber" in your label with an NSNumberFormatter 

//when the user hits the delete button: 
int numberToDelete = [[typedNumbers lastObject] intValue]; 
[typedNumbers removeLastObject]; 
displayedNumber -= (numberToDelete * 1e-NUMBER_OF_DECIMAL_PLACES); 
displayedNumber /= 10.0f; 
//show "displayedNumber" in your label with an NSNumberFormatter 

Typed trong trình duyệt. Caveat Implementor. Điểm thưởng để sử dụng NSDecimal thay vì số double.

Giải thích về những gì đang xảy ra:

Chúng tôi đang chủ yếu làm chút chuyển dịch, nhưng trong cơ sở 10 thay vì cơ sở 2. Khi người dùng gõ một số (ví dụ: 6), chúng tôi "thay đổi" số lượng hiện có còn lại một chữ số thập phân (ví dụ: 0,000 => 00,00), nhân số được đánh số bằng 0,01 (6 => 0,06) và thêm số đó vào số hiện có của chúng tôi (00.00 => 00.06). Khi người dùng nhập vào một số khác (ví dụ: 1), chúng tôi cũng làm như vậy. Di chuyển sang trái (00.06 => 00.60), nhân số đã nhập với 0,01 (1 => 0,01) và thêm (00,60 => 00,61). Mục đích của việc lưu trữ số này là NSMutableArray đơn giản chỉ là một tiện ích để xóa dễ dàng hơn. Nó không cần thiết, tuy nhiên. Chỉ cần một sự tiện lợi.

Khi người dùng nhấn nút xóa (nếu có), chúng tôi nhập số cuối cùng (ví dụ: 1), nhân 0,01 (1 => 0,01), trừ số của chúng tôi (0,61 => 0,6), và sau đó thay đổi số của chúng tôi đúng một chữ số thập phân (0,6 => 0,06). Lặp lại điều này miễn là bạn đã có số trong dãy số đã nhập của mình. Vô hiệu hóa nút xóa khi mảng đó trống.

Đề xuất sử dụng NSDecimal chỉ đơn giản là cho phép các số có độ chính xác rất cao.

+0

Được rồi, xin lỗi vì tất cả các câu hỏi, nhưng tôi đang xây dựng ứng dụng đầu tiên của mình và tôi vẫn còn rất mới với mục tiêu-c. Bạn có thể giải thích ngắn gọn mã của bạn đang làm gì không? Tôi biết bạn đã nhận xét rất tốt nhưng tôi vẫn không chắc chắn về cách sử dụng mã này :) –

+0

@Alex vừa hoàn tất chỉnh sửa câu trả lời :) –

Các vấn đề liên quan