網域名稱俱樂部

網域名稱俱樂部 (https://www.domainclub.org/index.php)
-   電腦網路相關技術 (https://www.domainclub.org/forumdisplay.php?f=16)
-   -   用 swift 寫的一個簡單的計算機 iphone app (https://www.domainclub.org/showthread.php?t=39666)

哈啦 2016-07-04 12:52 AM

用 swift 寫的一個簡單的計算機 iphone app
 


功能簡單但常用的都有了。可以直接輸入負數,在除法時若除以0時會報錯,但不會停止前面的計算過程,只要改正就好了,以免前功盡棄。並有提示功能,讓使用者知道目前是在進行加減乘除的哪一個。按=之後的結果可以繼續使用,除非按C清除掉。如果直接按其他數字,也會開始一個新的算程。
有增加按鍵的音效,但無法錄出來。

但這個app只是在自己的手機上試玩而已,所以app store是看不到的 。 ?:teeth

ras0314 2016-07-05 11:35 PM

如果寫好一個app要放上store要繳錢嗎?

哈啦 2016-07-06 12:03 AM

引用:

作者: ras0314 (文章 202364)
如果寫好一個app要放上store要繳錢嗎?

不太清楚,但好像要先申請一個開發者帳號,這好像就要付費,才能進行上架的樣子。:whoknows

peer 2016-07-06 11:18 AM

iOS系統的話,一年要繳交100美金,才能取得開發者帳號的資格,方能正式上架APP。

若僅是開發練習,目前已經開放iOS開發者,以XCODE寫好程式碼後,不是付費取得開發者帳號,也可以在本機端安裝app到自己的手機進行測試了!

哈啦 2016-07-06 12:28 PM

引用:

作者: peer (文章 202371)
iOS系統的話,一年要繳交100美金,才能取得開發者帳號的資格,方能正式上架APP。

似乎app做好後想上架還得經過 apple 審核過才行?不知審核的標準是什麼?

700214 2016-11-19 10:07 PM

計算機的程式碼有公開的嗎~?自己練習做但遇到瓶頸Q小數點做不出來

哈啦 2016-11-19 10:30 PM

引用:

作者: 700214 (文章 203287)
計算機的程式碼有公開的嗎~?自己練習做但遇到瓶頸Q小數點做不出來

這是去年中寫的,未必適用於現在的 iOS版本。而且寫好之後沒有再去修飾過,內容很亂,所以外人和現在的我都未必看得懂。?:teeth 還有就是對浮點數減法的部份會有問題,並未去解決。

http://code.club/forum.php?mod=viewthread&tid=358

DavidYuan 2016-11-21 09:52 AM

APP能不能上线,需要先看苹果的脸色,还有可能被苹果剥成皮~~~
极品好域名的价值又体现出来了。。。

~greenlau:~greenlau:~greenlau:

哈啦 2018-04-21 06:46 PM

引用:

作者: 哈啦 (文章 203288)
就是對浮點數減法的部份會有問題,並未去解決。

在寫計算機程式時,有一個困擾就是浮點數的減法會出現誤差。例如:
123.005 - 123.004 會得到 0.0009999...... 而非預期中的 0.001 。
因此寫了一個函式來解決這問題。
基本上是先求出二個數小數點後的位數,以最多的為準,乘上十的次方,再乘回二數將它們都變成整數,相減之後,得到的結果再除以剛才的十的次方,再變回字串出來。
代碼:

//檢查小數點之後是否有數字
func pointCheck(s:String) -> Bool {
  let n = Double(s)
    if Double(Int(n!)) != n {
        return true
    } else {
        return false
        }
}



代碼:

//將二個含有小數點的數字相減
func subtractFloat(s1:String, s2:String) -> String { //輸入二個數字字串
    var c:Double = 0 //用做計算結果之用
    var k:Double = 1 //作為十的次方之用
    let n1:Double! = Double(s1) //轉換字串為浮點數
    let n2:Double! = Double(s2) //轉換字串為浮點數
    var a1 = Array(s1) //轉換字串為字元陣列
    var a2 = Array(s2) //轉換字串為字元陣列
    var counter1 = 0 //第一個陣列的元素個數
    var counter2 = 0 //第二個陣列的元素個數
    var afterPoint = 0 //看誰的小數點後面的數字個數多就給它
       
        //求出二個數字小數點之後的數字個數
    for i in 0...(a1.count-1) {
        if a1[i] == "." {
            counter1 = a1.count - i - 1
        }
    }
    for i in 0...(a2.count-1) {
        if a2[i] == "." {
            counter2 = a2.count - i - 1
        }
    }
       
        //將比較多的個數給予afterPoint
    if counter1 >= counter2 {
        afterPoint = counter1 }
    else {
        afterPoint = counter2
    }
   
        //將afterPoint當成十的次方數
    for _ in 1...afterPoint {
        k = k*10
    }
   
       
    c = (n1*k - n2*k)/k //先將二個數字乘上k都變成整數再相減,減完後再除以k回歸為浮點數
   
       
    return String(c) //將結果轉換成字串回傳

}


最終解決函式:
代碼:

func minus(str1:String,str2:String){
    if pointCheck(s:str1)||pointCheck(s:str2) {
    print(subtractFloat(s1:str1,s2:str2))
} else {
    print( String(Int(Double(str1)!) - Int(Double(str2)!)) ) /*為何在此還要先把已知無小點的字串先換成Double再Int呢?因為如果字串是 "33.0"這種的,直接Int("33.0")會得到 nil 的答案,而造成程式fatal error。所以再多加一層轉換來把關*/
}
}


哈啦 2018-08-14 05:11 PM

引用:

作者: 哈啦 (文章 206042)
在寫計算機程式時,有一個困擾就是浮點數的減法會出現誤差。例如:
123.005 - 123.004 會得到 0.0009999...... 而非預期中的 0.001 。
因此寫了一個函式來解決這問題。
基本上是先求出二個數小數點後的位數,以最多的為準,乘上十的次方,再乘回二數將它們都變成整數,相減之後,得到的結果再除以剛才的十的次方,再變回字串出來。


後來發現這個解決方案並不成功,一樣會出現類似的狀況。
最近重新研究了一下,找到其他方案,又重新設計了一次,基本上解決了上述問題。而且還多了幾項新的特點:
一是這次的介面布局會跟著不同裝置螢幕的大小而變化,所以可以在目前所有的 iPhone or iPad 上看。直放橫放都可以。
二是多了backspace功能,按錯數字時可以倒著刪回去。

致命的 bug 目前還未發現,但某些功能上不符當初的想像,有所欠缺。



所有時間均為 +8。現在的時間是 07:39 AM

Powered by vBulletin® 版本 3.8.4
版權所有 ©2000 - 2024,Jelsoft Enterprises Ltd.