{"id":1433,"date":"2026-01-02T12:32:01","date_gmt":"2026-01-02T04:32:01","guid":{"rendered":"https:\/\/biatch0.net\/?p=1433"},"modified":"2026-03-22T19:41:52","modified_gmt":"2026-03-22T11:41:52","slug":"cpcalculator-a-simple-cost-per-calculator","status":"publish","type":"post","link":"https:\/\/biatch0.net\/index.php\/2026\/01\/02\/cpcalculator-a-simple-cost-per-calculator\/","title":{"rendered":"CPCalculator &#8211; A simple Cost Per Calculator"},"content":{"rendered":"<h1>Introduction<\/h1>\n<p>Over the last couple of days of the year (including New Year), I decided to work on something that has been annoying me for some time. As a cheapskate, my objective is always to get the most for the least&#8230; and this includes when grocery shopping. This app\/site was born out of my desire to understand which location, which size\/pack option, etc would give me the best &#8220;bang for my buck&#8221;.<\/p>\n<p>Should I buy the pack of 27 for THB 105, or the pack of 40 for THB 145? Or maybe the pack of 60 for THB 196? What&#8217;s the cost per unit? Maybe I need a price comparison tool? Which option gives me the best value? You may already know the answer instinctually if you are decent at math, but it&#8217;s unlikely that you&#8217;ll know the exact savings or efficiency of each item. Or maybe you&#8217;re good at math and know all of these things&#8230; but now you&#8217;re old and you just don&#8217;t remember the stats for Item #1 once you reach the other aisle where Item #2 is sitting&#8230; and you end up going back and forth a couple of times. This app\/site solves this issue by allowing inputs of data from multiple items, then comparing them to each other and displaying the processed output in a neat table with a clearly marked efficiency winner (or winners in the case of a tie).<\/p>\n<p>Try the calculator here: <a href=\"http:\/\/projects.biatch0.net\/cpcalculator\">http:\/\/projects.biatch0.net\/cpcalculator<\/a><\/p>\n<p>This tool is for anyone comparing prices across different pack sizes, stores, or promotions &#8211; especially when mental math stops being reliable. Or your brain&#8230; whichever.<\/p>\n<h1>Live Preview<\/h1>\n<h1><img loading=\"lazy\" decoding=\"async\" src=\"data:image\/gif;base64,R0lGODlhAQABAIAAAAAAAP\/\/\/ywAAAAAAQABAAACAUwAOw==\" fifu-lazy=\"1\" fifu-data-sizes=\"auto\" fifu-data-srcset=\"https:\/\/i2.wp.com\/biatch0.net\/wp-content\/uploads\/2026\/01\/Screenshot-2026-01-02-at-11.04.57-AM-158x300.png?ssl=1&w=75&resize=75&ssl=1 75w, https:\/\/i2.wp.com\/biatch0.net\/wp-content\/uploads\/2026\/01\/Screenshot-2026-01-02-at-11.04.57-AM-158x300.png?ssl=1&w=100&resize=100&ssl=1 100w, https:\/\/i2.wp.com\/biatch0.net\/wp-content\/uploads\/2026\/01\/Screenshot-2026-01-02-at-11.04.57-AM-158x300.png?ssl=1&w=150&resize=150&ssl=1 150w, https:\/\/i2.wp.com\/biatch0.net\/wp-content\/uploads\/2026\/01\/Screenshot-2026-01-02-at-11.04.57-AM-158x300.png?ssl=1&w=240&resize=240&ssl=1 240w, https:\/\/i2.wp.com\/biatch0.net\/wp-content\/uploads\/2026\/01\/Screenshot-2026-01-02-at-11.04.57-AM-158x300.png?ssl=1&w=320&resize=320&ssl=1 320w, https:\/\/i2.wp.com\/biatch0.net\/wp-content\/uploads\/2026\/01\/Screenshot-2026-01-02-at-11.04.57-AM-158x300.png?ssl=1&w=500&resize=500&ssl=1 500w, https:\/\/i2.wp.com\/biatch0.net\/wp-content\/uploads\/2026\/01\/Screenshot-2026-01-02-at-11.04.57-AM-158x300.png?ssl=1&w=640&resize=640&ssl=1 640w, https:\/\/i2.wp.com\/biatch0.net\/wp-content\/uploads\/2026\/01\/Screenshot-2026-01-02-at-11.04.57-AM-158x300.png?ssl=1&w=800&resize=800&ssl=1 800w, https:\/\/i2.wp.com\/biatch0.net\/wp-content\/uploads\/2026\/01\/Screenshot-2026-01-02-at-11.04.57-AM-158x300.png?ssl=1&w=1024&resize=1024&ssl=1 1024w, https:\/\/i2.wp.com\/biatch0.net\/wp-content\/uploads\/2026\/01\/Screenshot-2026-01-02-at-11.04.57-AM-158x300.png?ssl=1&w=1280&resize=1280&ssl=1 1280w, https:\/\/i2.wp.com\/biatch0.net\/wp-content\/uploads\/2026\/01\/Screenshot-2026-01-02-at-11.04.57-AM-158x300.png?ssl=1&w=1600&resize=1600&ssl=1 1600w\" class=\"alignnone size-medium wp-image-1436\" style=\"font-size: 16px;\" fifu-data-src=\"https:\/\/i2.wp.com\/biatch0.net\/wp-content\/uploads\/2026\/01\/Screenshot-2026-01-02-at-11.04.57-AM-158x300.png?ssl=1\" alt=\"\" width=\"158\" height=\"300\" \/><\/h1>\n<p>In this scenario, which was one of the first times I wished an app\/site like this existed, I was doing my grocery shopping for my 3-in-1 coffee. Birdie (Robusta) Red to be specific. As can be seen from the screenshot (hopefully):<\/p>\n<ul>\n<li>Tops &#8211; Sells a pack of 27 satchets for THB 105<\/li>\n<li>Lotus &#8211; Sells a pack of 40 satchets for THB 145<\/li>\n<li>Makro &#8211; Sells a pack of 60 satchets for THB 196<\/li>\n<\/ul>\n<p>The Live Preview window at the bottom then spits out the key information that a user might be interested in &#8211; Makro is the cheapest, with each satchet bought there averaging out to cost THB 3.27 as compared to THB 3.63 at Lotus, and 3.89 at Tops.<\/p>\n<p>Of course, economy of scale is a simple way to look at these things, and a larger pack should in theory always be cheaper&#8230;\u00a0<strong>BUT<\/strong>, this is not always the case. This scenario was only an example anyway, and promotions, and especially those &#8220;online&#8221; like via Lazada\/Shopee can really make the math rather interesting (once you take into account shipping costs as well where necessary).<\/p>\n<p>For the most part, the Live Preview section\u00a0<em>should<\/em> be enough for most of us to make an informed decision. If you&#8217;re looking for more information, or if you prefer neater tables, you can click\u00a0<strong>Compare<\/strong>, and we&#8217;ll be whisked off to the next page.<\/p>\n<h1>Comparison Results<\/h1>\n<p><img loading=\"lazy\" decoding=\"async\" src=\"data:image\/gif;base64,R0lGODlhAQABAIAAAAAAAP\/\/\/ywAAAAAAQABAAACAUwAOw==\" fifu-lazy=\"1\" fifu-data-sizes=\"auto\" fifu-data-srcset=\"https:\/\/i0.wp.com\/biatch0.net\/wp-content\/uploads\/2026\/01\/Screenshot-2026-01-02-at-11.14.18-AM-300x113.png?ssl=1&w=75&resize=75&ssl=1 75w, https:\/\/i0.wp.com\/biatch0.net\/wp-content\/uploads\/2026\/01\/Screenshot-2026-01-02-at-11.14.18-AM-300x113.png?ssl=1&w=100&resize=100&ssl=1 100w, https:\/\/i0.wp.com\/biatch0.net\/wp-content\/uploads\/2026\/01\/Screenshot-2026-01-02-at-11.14.18-AM-300x113.png?ssl=1&w=150&resize=150&ssl=1 150w, https:\/\/i0.wp.com\/biatch0.net\/wp-content\/uploads\/2026\/01\/Screenshot-2026-01-02-at-11.14.18-AM-300x113.png?ssl=1&w=240&resize=240&ssl=1 240w, https:\/\/i0.wp.com\/biatch0.net\/wp-content\/uploads\/2026\/01\/Screenshot-2026-01-02-at-11.14.18-AM-300x113.png?ssl=1&w=320&resize=320&ssl=1 320w, https:\/\/i0.wp.com\/biatch0.net\/wp-content\/uploads\/2026\/01\/Screenshot-2026-01-02-at-11.14.18-AM-300x113.png?ssl=1&w=500&resize=500&ssl=1 500w, https:\/\/i0.wp.com\/biatch0.net\/wp-content\/uploads\/2026\/01\/Screenshot-2026-01-02-at-11.14.18-AM-300x113.png?ssl=1&w=640&resize=640&ssl=1 640w, https:\/\/i0.wp.com\/biatch0.net\/wp-content\/uploads\/2026\/01\/Screenshot-2026-01-02-at-11.14.18-AM-300x113.png?ssl=1&w=800&resize=800&ssl=1 800w, https:\/\/i0.wp.com\/biatch0.net\/wp-content\/uploads\/2026\/01\/Screenshot-2026-01-02-at-11.14.18-AM-300x113.png?ssl=1&w=1024&resize=1024&ssl=1 1024w, https:\/\/i0.wp.com\/biatch0.net\/wp-content\/uploads\/2026\/01\/Screenshot-2026-01-02-at-11.14.18-AM-300x113.png?ssl=1&w=1280&resize=1280&ssl=1 1280w, https:\/\/i0.wp.com\/biatch0.net\/wp-content\/uploads\/2026\/01\/Screenshot-2026-01-02-at-11.14.18-AM-300x113.png?ssl=1&w=1600&resize=1600&ssl=1 1600w\" class=\"alignnone size-medium wp-image-1437\" fifu-data-src=\"https:\/\/i0.wp.com\/biatch0.net\/wp-content\/uploads\/2026\/01\/Screenshot-2026-01-02-at-11.14.18-AM-300x113.png?ssl=1\" alt=\"\" width=\"300\" height=\"113\" \/><\/p>\n<p>Here, we&#8217;re treated to a marginally nicer looking table with like 1 extra column showing efficiency % versus the worst performer. In hindsight, I&#8217;m not even sure why I created a new page for this single extra stat&#8230; but I personally like it&#8230; and that&#8217;s good enough for me.<\/p>\n<h1>The Calculator<\/h1>\n<p>If you skipped ahead, you can try out the calculator here <a href=\"http:\/\/projects.biatch0.net\/cpcalculator\">http:\/\/projects.biatch0.net\/cpcalculator<\/a>. I&#8217;m not sure if I&#8217;ll update it any further, since it has 99% of the functionality that I personally require&#8230; but we&#8217;ll see.<\/p>\n<p>Update: I&#8217;ve updated it. Mainly UI based changes. I&#8217;ve also placed it on a separate domain where I plan to host all my &#8220;tools&#8221;.<\/p>\n<h1>Notes<\/h1>\n<ul>\n<li>No, you don&#8217;t need to input\u00a0<em>ALL<\/em> details including the Labels. By default, items are labeled as &#8220;Item #1&#8221; and so on&#8230; and this doesn&#8217;t affect the calculations in any way. It&#8217;s just there for user convenience, in case you need a label to keep track of different locations for example.<\/li>\n<li>Only unit count and unit price are required for calculations. Once you&#8217;ve filled the default 3 item list with a unit count and price, the calculator\u00a0<em>should<\/em> add another row for input, and keep doing this for each item you &#8220;fill out&#8221;.<\/li>\n<li>This tool doesn\u2019t replace common sense\u2014shipping costs, promotions, and availability still matter\u2014but it removes guesswork from the core math.<\/li>\n<\/ul>\n","protected":false},"excerpt":{"rendered":"<p>Introduction Over the last couple of days of the year (including New Year), I decided to work on something that has been annoying me for some time. As a cheapskate, my objective is always to get the most for the least&#8230; and this includes when grocery shopping. This app\/site was born out of my desire&#8230;<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"_jetpack_newsletter_access":"","_jetpack_dont_email_post_to_subs":false,"_jetpack_newsletter_tier_id":0,"_jetpack_memberships_contains_paywalled_content":false,"fifu_image_url":"","fifu_image_alt":"","_jetpack_feature_clip_id":0,"_jetpack_memberships_contains_paid_content":false,"footnotes":"","jetpack_post_was_ever_published":false},"categories":[1],"tags":[],"class_list":["post-1433","post","type-post","status-publish","format-standard","hentry","category-uncategorized"],"jetpack_featured_media_url":"","jetpack_sharing_enabled":true,"_links":{"self":[{"href":"https:\/\/biatch0.net\/index.php\/wp-json\/wp\/v2\/posts\/1433","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/biatch0.net\/index.php\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/biatch0.net\/index.php\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/biatch0.net\/index.php\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/biatch0.net\/index.php\/wp-json\/wp\/v2\/comments?post=1433"}],"version-history":[{"count":5,"href":"https:\/\/biatch0.net\/index.php\/wp-json\/wp\/v2\/posts\/1433\/revisions"}],"predecessor-version":[{"id":1451,"href":"https:\/\/biatch0.net\/index.php\/wp-json\/wp\/v2\/posts\/1433\/revisions\/1451"}],"wp:attachment":[{"href":"https:\/\/biatch0.net\/index.php\/wp-json\/wp\/v2\/media?parent=1433"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/biatch0.net\/index.php\/wp-json\/wp\/v2\/categories?post=1433"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/biatch0.net\/index.php\/wp-json\/wp\/v2\/tags?post=1433"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}